数组去重(支持对象数组)

// 数组去重方法
        // 1:支持基本数据类型组成的数组
        // 比如 let arr = [1, 5, 6, 6, 1, true, 'true', '6', 1, 1, 5];
        // 调用 RD(arr)
        // 返回 [1, 5, 6, true, "true", "6"]
        // 2:支持对象类型组成的数组,但是要声明是根据哪几个对象属性去进行判重的
        // 比如 let arr = [{name: 'a', age: 15}, {name: 'b', age: 15}, {name: 'a', age: 14}, {name: 'b', age: 15}];
        // 调用RD(arr, ['name'])
        // 返回 [{name: 'a', age: 15}, {name: 'b', age: 15}]
        // 调用RD(arr, ['age'])
        // 返回 [{name: 'a', age: 15}, {name: 'a', age: 14}]
        // 调用RD(arr, ['name', 'age'])
        // 返回 [{name: 'a', age: 15}, {name: 'b', age: 15}, {name: 'a', age: 14}]
        // 3:最后一个参数代表 遇到重复的 优先保留前面的还是优先保留后面的
        function RD(objs = [], attrs = [], desc = false) {
            return ((o => (desc && objs.reverse(), objs.filter((item) => ((s => (s == '' ? 
                ((t => (o[t] == void 0 && (o[t] = 1, !0) || !1))((item).toString() + (typeof item))) : 
                (o[s] == void 0 && (o[s] = 1, !0) || !1)
            ))(attrs.reduce((prev, cur) => prev + item[cur], ''))))))({}));
        }

 

posted @ 2021-02-06 14:43  吕洋  阅读(106)  评论(0)    收藏  举报