我有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' } ]
我知道可以手动遍历一个数组,从另一个数组中找到匹配的节点,然后合并它们,这很奇怪……想知道是否有任何库可以做到这一点。有什么想法吗?
您可以使用一个函数并定义公用密钥,合并应该在公用密钥上进行分组。它适用于未排序的数据。
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] 删除。
我来说两句