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

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 },
]
阅读 5.6k
2 个回答

嗨,思路供参考

// 取前
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']))

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题