尝试从 2 个不同长度的数组创建一个对象数组。一个数组具有 key
值,另一个数组是存储每个键的 values
的数组:
var keyArray = ["key1","key2","key3","key4"];
var valuesArray = [{"value1","value2","value3","value4"},{"value5","value6","value7","value8"},{"value9","value10","value11","value12"}];
我正在尝试为每个 foo
对象创建一个新的 results
数组:
var currentKey; // temp variable
var currentValue; // temp variable
var foo = {};
var results = [];
for(var i = 0; i < valuesArray.length; i++) {
for(var j = 0; j < keyArray.length; j++) {
currentKey = keyArray[j];
currentValue = valuesArray[i][j];
foo[currentKey] = currentValue;
}
results.push(foo);
}
console.log(results); // results = [{key1: "value9", key2: "value10", key3: "value11", key4: "value12"},{key1: "value9", key2: "value10", key3: "value11", key4: "value12"},{key1: "value9", key2: "value10", key3: "value11", key4: "value12"}]
预期结果:
console.log(results) // results = [{key1: "value1", key2: "value2", key3: "value3", key4: "value4"},{key1: "value5", key2: "value6", key3: "value7", key4: "value8"},{key1: "value9", key2: "value10", key3: "value11", key4: "value12"}]
出于某种原因,只有 valuesArray
中的最后一项 ({value9,value10,value11,value12}
) 被插入 results
数组
最佳答案
您一直在更新同一个 foo
对象。您应该在外循环的每次迭代中将一个新对象重新分配给 foo
:
var keyArray = ["key1","key2","key3","key4"];
var valuesArray = [["value1","value2","value3","value4"
],["value5","value6","value7","value8"],["value9","value10","value11","value12"]];
var currentKey; // temp variable
var currentValue; // temp variable
var foo;
var results = [];
for(var i = 0; i < valuesArray.length; i++) {
foo = {};
for(var j = 0; j < keyArray.length; j++) {
currentKey = keyArray[j];
currentValue = valuesArray[i][j];
foo[currentKey] = currentValue;
}
results.push(foo);
}
console.log(results);
您还可以使用 Array.map()
迭代值数组,Array.reduce()
为每个子数组生成一个对象:
var keyArray = ["key1","key2","key3","key4"];
var valuesArray = [["value1","value2","value3","value4"
],["value5","value6","value7","value8"],["value9","value10","value11","value12"]];
var results = valuesArray.map(function(s) {
return keyArray.reduce(function(o, k, i) {
o[k] = s[i];
return o;
}, {});
});
console.log(results);
关于javascript - 使用 array.push(obj) 错误创建对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48934251/