2015-08-15 69 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中試試看看控制檯的結果。