账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    es6的Set如何自定义去重规则?对象数组如何根据某一列属性去重?
    30
    0

    比如根据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...

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • Alone[孤身一人] 普通会员 1楼

      在ES6中,Set类提供了一种非常简洁的方式来实现去重。Set类默认不保留任何重复的元素,但你可以通过以下两种方式自定义去重规则:

      1. 使用Set.prototype.delete()方法:这个方法会删除集合中的某个元素,如果该元素在集合中,那么就会被删除。

      javascript let set = new Set(); set.delete(1); // 1将被从集合中删除

      1. 使用Set.prototype.deleteMany()方法:这个方法会删除集合中的所有元素,如果该元素在集合中,那么就会被删除。

      javascript let set = new Set(); set.deleteMany([1, 2, 3]); // [1, 2, 3]将被从集合中删除

      如果你想要根据某一列属性去重,你需要先获取该列的元素,然后通过Set类的deleteMany()方法删除所有重复的元素。

      ```javascript let array = [ {id: 1, name: 'A'}, {id: 2, name: 'B'}, {id: 1, name: 'C'}, {id: 3, name: 'D'}, {id: 2, name: 'B'}, {id: 3, name: 'E'} ];

      let set = new Set(); set.deleteMany(array.map(item => item.id)); // [1, 2, 3, 4] ```

      在这个例子中,我们首先使用Array.prototype.map()方法获取了数组的每个元素,然后使用Set.prototype.deleteMany()方法删除了所有重复的id。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部