Я пытаюсь использовать цикл for..in для перебора списка имен, добавления их в объект шаблона ('group'), а затем добавить каждый полный объект в массив ('queryList'). Это не работает, потому что каждая итерация перезаписывает ВСЕ значения в массиве. Любые предложения, почему это происходит?For..In Loop Overwriting ALL Array Values
// BATTERY OBJECT
var groupList = [ "LOGIN", "BROWSE", "SEARCH"];
// GROUP OBJECT
var group = {dbName: 'CARS', name: '', collectionName: 'group'};
// INIT VARS
var groupName = '',
queryList = [];
// COMPILATION FUNCTION
var buildGroupQueries = function(group){
// BUILD BATCH OF QUERIES
for (var i in groupList){
groupName = groupList[i];
group.name = groupName;
queryList[i] = group;
}
console.log(queryList);
}
buildGroupQueries(group);
Он должен выглядеть следующим образом:
[
{"dbName":"CARS","name":"LOGIN","collectionName":"group"},
{"dbName":"CARS","name":"BROWSE","collectionName":"group"},
{"dbName":"CARS","name":"SEARCH","collectionName":"group"}
]
Вместо этого я получаю:
[
{"dbName":"CARS","name":"SEARCH","collectionName":"group"},
{"dbName":"CARS","name":"SEARCH","collectionName":"group"},
{"dbName":"CARS","name":"SEARCH","collectionName":"group"}
]
Проблема с 'queryList [I] = группы;'. Посмотрите на это 'i'. Можете ли вы установить 'queryList [" LOGIN "]' на значение? Или, может быть, queryList должен быть инициализирован как словарь? Я могу просто избегать использования 'in', пока я не пойму, что я делаю с этими переменными. – Bobort
Проблема вовсе не с оператором 'in', проблема в том, что' group' является ссылкой и не копируется. –