javascript - 在不覆盖现有键值的情况下将对象的值添加到对象数组

标签 javascript arrays object underscore.js

你如何从这里开始:

var array = [{key: [3]}, {key1: [3]}, {key1: [3]}]
var object = {key1: [3], key2: [3]};

为此:

{key: [3], key1: [9], key2: [3]}

所有“key”都是用户 ID,如“LQVjUacPgK”,如下面的 obj 示例所示。

[N] = 是一个包含 N 个对象的数组,每个对象中包含大约 10 个键值对。

N = {obj, obj, obj};

obj = {_account: "JDQEPxoy3ktZRP9VEzAMtXLa7rXXedhQ4bARq"
_id: "oQER3vznDwikxm1wdLzJFdVjKL6XomcORMxDL"
amount: 170
category: Array[2]
category_id: "21003000"
date: "2015-06-09"Object
type: Object
userId: "LQVjUacPgK"}

现在我正在这样做:

var test = _.reduce(_.flatten(array.concat([object])),function(a,b){
     return _.extend(a, b);
       });
    }
};

并得到这个结果:

console.log(test)//{key: [3], key1: [3], key2: [3]}

需要明确的是,问题在于 key1 在所有对象之间具有不同的值。我想保留两者的值,以便 key1: [9]

最佳答案

这不是下划线答案,但基本上我不会为此使用 reduce 操作,而是做一个简单的 for-each:

var array = [{key: [3]}, {key1: [3]}, {key1: [3]}]
var object = {key1: [3], key2: [3]};

array.forEach(function(current) {
  Object.keys(current).forEach(function(name) {
//        object[name] = [((object[name] || [])[0] || 0) + current[name][0]];
      object[name] = (object[name] || []).concat(current[name]);
  });
});

console.log(JSON.stringify(object)); // {"key1":[3,3,3],"key2":[3],"key":[3]}

关于javascript - 在不覆盖现有键值的情况下将对象的值添加到对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30771040/

相关文章:

javascript - 由于某种原因在 native react 中渲染后发生 ComponentWillMount

arrays - 如果当前索引的值小于我们要查找的值,为什么我们在斐波那契搜索中丢弃 2 个斐波那契数?

javascript - 从 json 数据中获取类型名称

javascript object literal - 嵌套函数和 "this"关键字

javascript - 计算价格

Javascript : global variable passed-by-reference on stored function

javascript - 如何监听 socket.io 上的不同端口

jquery - 从 JSON 数据获取动态表的列标题

python - 从 Python 列表中存储和检索对象

Python:对象抛出参数警告