从数组中填充另一个数组 - Javascript

32

我试图在JS中做一件非常简单的事情(将一个数组的值分配给另一个数组),但是某种方式,数组bar的值似乎根本没有受到影响。

当然,我尝试的第一件事是简单地写bar = ar; - 没有起作用,所以我尝试手动循环... 仍然不起作用。

我不理解Javascript的怪癖!请帮忙!!


var ar=["苹果","香蕉","橙子"];
var bar;

for(i=0;i<ar.length;i++){
    bar[i]=ar[i];
}
alert(ar[1]);

这里是 jsfiddle 的链接: http://jsfiddle.net/vGycZ/


(上面只是示例,实际数组是多维的。)


请查看此链接:http://www.hardcode.nl/subcategory_1/article_414-copy-or-clone-javascript-array-object - Pranay Rana
你可以使用Firefox的Firebug插件来发现指出给你的语法错误(“arr”与“ar”)。我敢说,如果没有它,你无法正确地进行Javascript开发。 - Niels Bom
我不怎么写JavaScript,说实话我从来没搞明白过如何使用Firebug :( ... 你能给我推荐几个好的教程吗? - ina
8个回答

70

你的代码无法工作是因为你没有初始化bar

var bar = [];

你还忘记声明i变量,这可能会带来问题。例如,如果代码在一个函数内部,i最终将成为全局变量(始终使用var)。但是,你可以通过使用slice方法创建第一个数组的副本来避免循环。
var arr = ["apple","banana","canaple"];
var bar = arr.slice();

对于切片加1,是的。顺便问一下,切片在多维数组中是否适用? - ina
看起来你可以用一个小技巧来实现!var bar = arr.concat(); - Daniel Sloof
@ina:slice浅复制数组中的对象元素,你能否提供一个不那么简化的例子,以便更清楚地了解你想要实现什么? - Christian C. Salvadó

9

链接已失效。 - A-Tech

8

在ES6中,你可以使用Array.from

var ar = ["apple","banana","canaple"];
var bar = Array.from(ar);
alert(bar[1]); // alerts 'banana'

4
你有两个问题:
首先,你需要将bar初始化为一个数组:
var bar = [];

这里应该是ar而不是arr:

for(i=0;i<arr.length;i++){

然后你会收到关于你的香蕉的提醒 :)

是的 - 没错。我太习惯 PHP 的马虎了,忘记声明数组了!感谢你成为第一个回答者! - ina

4
使用ES6+,你可以简单地做到这一点。
const original = [1, 2, 3];
const newArray = [...original];

扩展语法的文档在这里

要检查,请在开发者工具控制台中运行以下代码

const k = [1, 2];
const l = k
k === l
> true
const m = [...k]
m
> [1, 2]
k === m
> false

你能提供关于这个的文档链接吗? - Mike Kormendy

2

您拼写了变量ar错误,请尝试以下操作

for(i=0;i<ar.length;i++){
    bar[i]=ar[i];
}
alert(ar[1]);

是的,感谢指针 - 这不是实际的代码,只是为了快速打出jsfiddle而进行的残酷简化。 - ina

2
问题可能出在 for 循环语句中:
for(i=0;i<ar.length;i++){
    bar[i]=ar[i];
}
alert(ar[1]);

您需要将arr.length更正为ar.length。最好的初始化方法是:var bar = []


2

在你的代码中,for循环中的变量arr和你原始的数组ar不是同一个:你多了一个r


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接