为了账号安全,请及时绑定邮箱和手机立即绑定

在对象数组中选择唯一项目

在对象数组中选择唯一项目

手掌心 2021-06-16 14:01:03
假设我有以下对象数组[{a:1,b:2,c:4}, {a:3,b:4,c:7}, {a:7,b:10,c:10}, {a:1, b:2,c:4}]如何选择此数组中的唯一项。我需要比较两个字段(仅 a、b,不包括 c),并且我看到的示例显示了一个仅包含单个字段的地图。
查看完整描述

3 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

对于动态键,创建一个函数,该函数将表示键的数组和数组字符串作为输入。


创建另一个辅助方法来比较两个对象的给定键。


使用filter()对象的数组,然后使用对every()当前索引之前元件不等于关于给定键的当前对象。


let arr = [{a:1,b:2,c:4}, {a:3,b:4,c:7}, {a:7,b:10,c:10}, {a:1, b:2,c:4}];

function comp(obj1,obj2,keys){

  return keys.every(k => obj1[k] === obj2[k]);

}

function getUnique(arr,keys){

  return arr.filter((x,i) => arr.slice(0,i).every(a => !comp(a,x,keys)))

}


console.log(getUnique(arr,['a','b']))


查看完整回答
反对 回复 2021-06-18
?
繁花如伊

TA贡献2012条经验 获得超12个赞

您可以reduce使用 aMap作为累加器的数组。使用a和b属性的组合作为键,以便删除重复项。然后使用Map#values获取输出


const input = [{a:1,b:2,c:4}, {a:3,b:4,c:7}, {a:7,b:10,c:10}, {a:1, b:2,c:4}],

      mapped = input.reduce((map, o) => map.set(o.a + "_" + o.b, o), new Map),

      output = Array.from(mapped.values());


console.log(output)


查看完整回答
反对 回复 2021-06-18
  • 3 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信