我有 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/