如何将2个数组与一个对象合并? [英] How to merge 2 arrays with objects in one?

查看:48
本文介绍了如何将2个数组与一个对象合并?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个数组:

  1. [{名称:'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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆