javascript - 如何在 JavaScript 中合并两个对象数组,并对重复对象键的值求和?

标签 javascript arrays object underscore.js lodash

因此,我的对象中有不确定数量的数组,我需要合并其中的对象。保证数组的长度相同,并且保证对象具有相同的键。

我尝试过迭代它,但由于某种原因,它对数组中每个键中的对象进行了求和。

示例:

var demo = {
  "key1": [{"a": 4, "b": 3, "c": 2, "d": 1}, {"a": 2, "b": 3, "c": 4, "d": 5}, {"a": 1, "b": 4, "c": 2, "d": 9}]
  "key2": [{"a": 3, "b": 5, "c": 3, "d": 4}, {"a": 2, "b": 9, "c": 1, "d": 3}, {"a": 2, "b": 2, "c": 2, "d": 3}]
};

mergeArrays(demo);

/* Returns:
  {
    "arbitraryname": [{"a": 7, "b": 8, "c": 5, "d": 5}, {"a": 4, "b": 12, "c": 5, "d": 8}, {"a": 3, "b": 6, "c": 4, "d": 12}]
  }
*/

我当前的实现尝试做这样的事情:

var skeleton = {
  "a": 0,
  "b": 0,
  "c": 0,
  "d": 0
};

function mergeArrays = function (obj) {
  var flat = {};
  var keys = _.keys(prod);
  var len = obj[keys[0]].length;
  flat["arbitraryname"] = [];
  for (var i = 0; i < len; i++) {
    flat["arbitraryname"].push(skeleton);
  }
  flat["arbitraryname"].forEach(function (v, k) {
    _.forIn(v, function (key, value) {
      flat["arbitraryname"][k][key] += value;
    });
  });
  return flat;
}

有没有更简单的方法?它现在似乎还返回一个完全相同的数组。例如:

[{"a": 14, "b": 26, "c": 14, "d": 25}, {"a": 14, "b": 26, "c": 14, "d": 25}, {"a": 14, "b": 26, "c": 14, "d": 25}]

其中每个对象是数组中所有元素的总和。我究竟做错了什么?有没有更简单的方法?

最佳答案

以下内容与问题顶部的注释数组匹配。预期结果有点不清楚

使用Object.keys()使其变得相当简单。

var demo = {
    "key1": [{"a": 4, "b": 3, "c": 2, "d": 1}, {"a": 2, "b": 3, "c": 4, "d": 5}, {"a": 1, "b": 4, "c": 2, "d": 9}],
    "key2": [{"a": 3, "b": 5, "c": 3, "d": 4}, {"a": 2, "b": 9, "c": 1, "d": 3}, {"a": 2, "b": 2, "c": 2, "d": 3}]
};

// iterate and map using first array
var res = demo.key1.map(function(item, idx) { 
    //  loop over keys of each object in array and return 
    //  new objects with sums of matching index and keys
    return Object.keys(item).reduce(function(obj,key) {
        obj[key] = item[key] + demo.key2[idx][key];
        return obj;
    },{});  
});

// print "res" for demo
document.getElementById('pre').innerHTML =JSON.stringify(res, null, 4)
<pre id="pre"></pre>

关于javascript - 如何在 JavaScript 中合并两个对象数组,并对重复对象键的值求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34823703/

相关文章:

javascript - 将文本字段的值返回给 JavaScript

arrays - Swift:将字符串中的单独字符与字典中的值匹配

PHP读取每一行

javascript - 在数组中查找对象并更改其属性(如果我知道它的其他属性)

javascript - 将对象内部的对象数组作为多个对象 JavaScript

javascript - 使用 signalr 进行 AJAX Like Call

javascript - 如何同时使用 if 和 while Javascript 设置 3 个条件

python - 将 python 对象转换为 XML 表示

javascript - 在 vuejs 中将旧代码修改为 vue router 4

c++ - 如何加快 C++ 中的矩阵乘法?