鍍金池/ 問答/HTML5  HTML/ 請問如果過濾掉數(shù)組中有重復(fù)屬性的對象?

請問如果過濾掉數(shù)組中有重復(fù)屬性的對象?

RT
例如:

const demo = [
  { a:1, b:4 },
  { a:2, b:4 },
  { a:3, b:5 },
]

現(xiàn)在要過濾掉demo中的 {a:1, b:4 }{ a:2, b:4 },他們中留一個即可,返回一個新數(shù)組,請問ES6有什么快捷的方法嗎?

過濾后結(jié)果為:

const demo = [
  { a:1, b:4 },
  { a:3, b:5 },
]

const demo = [
  { a:2, b:4 },
  { a:3, b:5 },
]
回答
編輯回答
毀憶

ES6沒有,不過Lodash
PS:代碼亂了,直接上圖吧
demo例子

2018年3月14日 20:55
編輯回答
黑與白

嗨,思路供參考

// 取前
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']))
2017年2月24日 07:43