基于公共属性合并2个json数组对象

萨哈斯

我有2个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' } ]

我知道可以手动遍历一个数组,从另一个数组中找到匹配的节点,然后合并它们,这很奇怪……想知道是否有任何库可以做到这一点。有什么想法吗?

妮娜·斯科茨(Nina Scholz)

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

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

    array.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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在React中找到两个对象数组的公共属性值

如何基于公共属性加入两个列表

使用lodash按属性合并2个排序的对象数组

基于一个公共键angular 2合并2个数组

无法访问QKeyEvent对象上的某些公共属性

具有公共属性的Typescript类导致一个空的JavaScript对象

如何从嵌套的每个数组中删除一个公共属性

在JavaScript中,有一种优雅的方式可以合并两个Object并求和任何公共属性?

如何从mongodb中的对象数组获取公共属性

在Json中映射具有公共属性和动态名称的数组

从数组中删除具有公共属性的对象

如何基于属性合并数组中的对象

合并两个不同的列表,然后按C#上的公共属性排序?

合并2个Json对象数组

使用javascript根据一个公共属性对多个数组进行分组

使用c#获取两个不同对象的公共属性

对象分配以合并 2 个对象数组并保留自身属性

如何使用与其他 JSON 对象的一个公共属性来获取一个 JSON 的特定属性?

基于公共属性合并节点并将所有属性添加到初始节点

如何基于公共属性将数组中的对象分组为数组数组

将 2 个不同类的 IList 合并为 1 个连接在公共属性上的 IList

使用 node.js 使用公共属性合并两个 javascript 对象

按公共属性(日期)汇总对象数组

基于对象属性合并对象的Javascript数组

如何按公共属性对对象数组进行分组并将其他属性放在一起

如何创建具有公共属性值的对象数组

如何在数组中组合对象属性,这些属性在 javascript 中具有公共属性

在c#中复制对象之间的公共属性

PHP 以整数形式访问对象的公共属性