es6的Set如何自定义去重规则?对象数组如何根据某一列属性去重?

比如根据a数组元素中的name属性去重

这是最简洁的方法了吗?

function unique(arr) {
    const res = new Map();
    return arr.filter((a) => !res.has(a.name) && res.set(a.name, 1))
}

引用:
https://segmentfault.com/q/10...

阅读 9.1k
3 个回答

function unique(arr) {

const res = new Map();
return arr.filter((a) => !res.has(a.name) && res.set(a.name, 1))

}

没看懂题目,但如果按照给出代码的话来看,这个可能更简洁一点。

const arrayUniq = (x) => [...new Set(x)];

就是Set对象里的每一个数据地址不同,即为不同的对象!
对象类型的数组,如定义:[{a:1,b:2},{a:1,b:3},{a:1,b:2}] 过滤之后还是三个对象;
但是 如果你是 let obj = {a:1,b:2}; arr.push(obj);这样放进去 最终会被过滤掉冗余的,只剩一个

const arrayUniq = (x) => [...new Set(x)];
let arr1 = [{a:1,b:2},{a:1,b:3},{a:1,b:2}];
let arr2 = [{a:1,b:3}];
let obj = {a:1,b:2};
arr2.push(obj);
arr2.push(obj);

arrayUniq(arr1);
//[{a:1,b:2},{a:1,b:3},{a:1,b:2}]
arrayUniq (arr2);
//[{a:1,b:2},{a:1,b:3}]

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