javascript - 使用 array.push(obj) 错误创建对象数组

标签 javascript arrays javascript-objects

尝试从 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/

相关文章:

javascript - 悬停功能无法按需工作

javascript - 重新格式化数据传递到函数的方式时出错

C++:父子对象数组

javascript - 第一次执行代码时将永久值存储在变量中,JavaScript

javascript - 使用 Angular Material 更新 md-select 中的 bool 值

javascript - 创建具有属性的函数

javascript - 发布的 github 页面上出现 "Failed to create temp file 18"错误

javascript - 如何在 jQuery 中序列化多个可排序项和子项

javascript - iOS WKWebView 音频仅播放一次

java - 制作点的二维数组列表