2015-08-15 3 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 во го e инициализация. Поэтому, когда вы позже нажимаете «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 и посмотрите результаты с консоли.

Смежные вопросы