javascript - 根据共同属性合并 2 个 json 数组对象

标签 javascript arrays json node.js

我有 2 个带有一些公共(public)字段的 Json 数组。但它们没有按任何特定顺序排序。我希望能够根据属性合并它们。

var merge = require('deepmerge');
var one = [{
  id:1
},
{
  id:2
}];
var two = [{
  id:2,
  name:"test1"
},
{
  id:1,
  name:"test2"
}];

console.log(merge(one,two));

deepmerge 会导致盲合并,第一个元素与另一个数组中的第一个元素。

[ { id: 2, name: 'test1' }, { id: 1, name: 'test2' } ]

我知道可以手动迭代一个数组,从另一个数组中找到匹配的 Node 并将它们合并...想知道是否有任何库可以执行此操作。想法?

最佳答案

您可以使用函数并定义公用键,合并应在该公用键上进行分组。它适用于未排序的数据。

function merge(arrays, key) {
    var r = [],
        hash = Object.create(null);

    arrays.forEach(function (a) {
        a.forEach(function (o) {
            if (!hash[o[key]]) {
                hash[o[key]] = {};
                r.push(hash[o[key]]);
            }
            Object.keys(o).forEach(function (k) {
                hash[o[key]][k] = o[k];
            });
        });
    });
    return r;
}

var one = [{ id: 1, score: 100 }, { id: 2, score: 200 }, { id: 4, score: 400 }],
    two = [{ id: 2, name: "test1" }, { id: 1, name: "test2" }, { id: 3, name: "test3" }],
    merged = merge([one, two], 'id');

console.log(merged);

关于javascript - 根据共同属性合并 2 个 json 数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38053193/

相关文章:

java - 数组初始化 - 性能差异

java - json包与jdk 1.4不兼容

ajax - 具有动态更新 api 的 extjs TreeStore 代理

javascript - 设置 PHP 数组以使用从 Json 对象创建的下拉列表

javascript - 将对象数组转换为 Map Immutable.js

javascript - 脚本无法放置在正文标记中

javascript - Google Apps 脚本连接电子表格中 2 列的 2 个值 - 显示在列表框中

JavaScript/CSS : normalize all element stylings on a page?

c++ - 如何在 C++ 中的类中分配可修改的数组大小

将局部变量复制到全局变量时,C++ GCC 优化速度变慢