如何将2个数组与一个对象合并? [英] How to merge 2 arrays with objects in one?
本文介绍了如何将2个数组与一个对象合并?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有2个数组:
-
[{名称:'test',姓氏:'test',性别:'f'},{名称:'test1',姓氏:'test1',性别:'f'},{name:'test2',姓氏:'test2',性别:'m'}]
[{{名称:'test21',姓氏:'test21',性别:'f'},{name:'test1',姓氏:'test1',性别:'f'},{name:'test2',姓氏:'test2',性别:'m'},{name:'test22',姓氏:'test22',性别:'m'}]
如何将它们与唯一对象(用于唯一检查名称")合并到一个数组中?
How to merge these in one array with unique objects (for unique check 'name')?
推荐答案
filter
和 find
的组合将起作用
var a = [{name:'test', lastname: 'test', gender:'f'},{name:'test1', lastname: 'test1', gender:'f'},{name:'test2', lastname: 'test2', gender:'m'}];
var b = [{name:'test21', lastname: 'test21', gender:'f'},{name:'test1', lastname: 'test1', gender:'f'},{name:'test2', lastname: 'test2', gender:'m'},{name:'test22', lastname: 'test22', gender:'m'}];
var c = a.filter(a => b.find(b => b.name === a.name) === undefined).concat(b);
console.table(c);
您还可以制作一个通用的 uniqueByKey
函数
You could also make a generic uniqueByKey
function
var uniqueByKey = (key, xs)=>
xs.reduce((ys,x)=>
ys.find(y=> y[key] === x[key]) === undefined
? ys.concat([x])
: ys,
[]);
var a = [{name:'test', lastname: 'test', gender:'f'},{name:'test1', lastname: 'test1', gender:'f'},{name:'test2', lastname: 'test2', gender:'m'}];
var b = [{name:'test21', lastname: 'test21', gender:'f'},{name:'test1', lastname: 'test1', gender:'f'},{name:'test2', lastname: 'test2', gender:'m'},{name:'test22', lastname: 'test22', gender:'m'}];
var c = uniqueByKey('name', a.concat(b));
console.table(c);
如果要处理特别大的数据集,则使用 Set
缓存而不是 Array.prototype.find
可能更好.
If you're dealing with particularly large datasets, using a Set
cache instead of Array.prototype.find
might be better.
var uniqueByKey = (key, xs)=>
xs.reduce(([set, ys], x)=>
set.has(x[key])
? [set, ys]
: [set.add(x[key]), ys.concat([x])]
, [new Set, []]
) [1];
var a = [{name:'test', lastname: 'test', gender:'f'},{name:'test1', lastname: 'test1', gender:'f'},{name:'test2', lastname: 'test2', gender:'m'}];
var b = [{name:'test21', lastname: 'test21', gender:'f'},{name:'test1', lastname: 'test1', gender:'f'},{name:'test2', lastname: 'test2', gender:'m'},{name:'test22', lastname: 'test22', gender:'m'}];
var c = uniqueByKey('name', a.concat(b));
console.table(c);
这篇关于如何将2个数组与一个对象合并?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文