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']))
添加回答
举报
0/150
提交
取消