2015-08-15 48 views
2

我已经定义了一个数组列表,在JavaScript:新值添加到现有阵列中的JavaScript

var arrListContainer = []; 
var emptyArray = []; 
for (var i = 0; i < 5; ++i) { 
    arrListContainer.push(emptyArray); 
} 

列表的默认值是:[[], [], [], [], []]

我想增加价值arrListContainer[2],所以:

arrListContainer[2].push("a"); 

为什么结果是[["a"], ["a"], ["a"], ["a"], ["a"]]

我不明白。我只需要[[], [], ["a"], [], []]

谢谢!

+0

你可以复制你的问题到一个片段或创建一个jsfiddle? – NewToJS

+0

尝试像这样:'arrListContainer.push([]);' – iamawebgeek

回答

7

你让在arrListContainer点各指标在同一个对象实例,你需要你的循环中创建新emptyArray S(或干脆直接按字面)

var arrListContainer = [], i; 
for (i = 0; i < 5; ++i) { 
    arrListContainer.push([]); 
} 

如果你想更清晰,你在做的方式与此类似

var foo = [], 
    bar = foo; 
foo[2] = 'baz'; 
// what is bar[2]? 
bar[2]; // "baz" 
// because 
foo === bar; // true 
1

你个中推相同emptyArray实例到每个arrListContainer元素初始化。因此,当您稍后将“a”插入到它的第二个索引中时,您将影响其余的元素,因为它们都包含相同的emptyArray项目。

如果你改变你的代码下面,您不要再使用相同的emptyArray变量它的工作原理:

var arrListContainer = []; 
for (var i = 0; i < 5; ++i) { 
    arrListContainer.push([]); 
} 
arrListContainer[2].push("a"); 
0
var arrListContainer = []; 
var emptyArray = []; 


for (var i = 0; i < 5; ++i) { 
    var emptyArray = []; 
    if(i === 2){ 
     emptyArray.push("a"); 
    } 
    arrListContainer.push(emptyArray); 
} 


for(var i=0; i< 5; ++i){ 
    console.log(arrListContainer[i]); 
} 

这是你想要的吗?在你的js文件或jsfiddle中试试看看控制台的结果。