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

请问如果过滤掉数组中有重复属性的对象?

请问如果过滤掉数组中有重复属性的对象?

森栏 2019-03-21 22:19:56
RT例如:const demo = [   { a:1, b:4 },   { a:2, b:4 },   { a:3, b:5 }, ]现在要过滤掉demo中的 {a:1, b:4 } 或 { a:2, b:4 },他们中留一个即可,返回一个新数组,请问ES6有什么快捷的方法吗?过滤后结果为:const demo = [   { a:1, b:4 },   { a:3, b:5 }, ]或const demo = [   { a:2, b:4 },   { a:3, b:5 }, ]
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

嗨,思路供参考


// 取前

function filter1 (arr = [], keys = []) {

  const keySets = new Map(keys.map(k => [k, new Set()]))

  return arr.filter(x => {

    const exist = keys.some(k => keySets.get(k).has(x[k]))

    if (!exist) {

      keys.forEach(k => keySets.get(k).add(x[k]))

    }

    return !exist

  })

}


// 取后

function filter2 (arr = [], keys = []) {

  return keys.reduce((r, k) => [...r.reduce((m, x) => m.set(x[k], x), new Map()).values()], arr)

}


console.log(filter1(demo, ['a', 'b']))

console.log(filter2(demo, ['a', 'b']))


查看完整回答
反对 回复 2019-04-09
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

ES6没有,不过Lodash
PS:代码乱了,直接上图吧

https://img1.sycdn.imooc.com//5cac459c0001f34505740745.jpg

查看完整回答
反对 回复 2019-04-09
  • 2 回答
  • 0 关注
  • 1065 浏览
慕课专栏
更多

添加回答

举报

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