猿问

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

假设我有以下对象数组

[{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),并且我看到的示例显示了一个仅包含单个字段的地图。


手掌心
浏览 150回答 3
3回答

HUH函数

对于动态键,创建一个函数,该函数将表示键的数组和数组字符串作为输入。创建另一个辅助方法来比较两个对象的给定键。使用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']))

繁花如伊

您可以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)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答