es6数组去重的常用方法

第一种: 利用Map对象和数组的filter方法

1.Map对象是ES6提供的一个新的数据结构,其中has的办法是返回一个布尔值,表示某个值是否存在当前的Mp对象之中,set的办法是给Map对象设置key/value。
2.filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
所以说,Map对象结合filter方法可以达到数组去重的效果

let arr = [1, 1, 1, 2, 3, 3, 4, 5, 5, ];
function netArr(arr) {
    const db = new Map();
    return arr.filter((val) => !db.has(val) && db.set(val, 1))
}
let arr2 = netArr(arr);
console.log(arr2) //[1, 2, 3, 4, 5]

第二种:利用Set对象和数组的Array.from方法

1.Set是ES6新提供的数据结构,Set集合,没有重复元素的集合
2.Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。
所以set结合Array.from同样可以达到数组去重的效果。但需要注意:主流浏览器像Chrome,Firfox,Opera,Safari,包括微软的Edge,都是支持的,但是唯独IE系列不支持。

let arr = [1, 1, 1, 2, 3, 3, 4, 5, 5, NaN, NaN, NaN, ];
console.log(Array.from(new Set(arr))) //[1, 2, 3, 4, 5, NaN]

第三种:利用Set+扩展运算符

1.Set是ES6新提供的数据结构,Set集合,没有重复元素的集合

let arr = [1, 1, 1, 2, 3, 3, 4, 5, 5, NaN, NaN, NaN, ];
console.log([...new Set(arr)])//[1, 2, 3, 4, 5, NaN]

第四种:有时候还需对数组对象进行去重。那么这个办法就很实用.

1.利用reduce数组:arr.reduce(callback,[initialValue])
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。

var obj = [{ id: 0,val: 'daisy',}, { id: 1,val: 'jack',}, {id: 2,val: 'rose',}, {id: 3,val: 'daisy',}, {id: 4,val: 'rose',}];
var objFun = function() {
    const db = {}
    this.obj = this.obj.reduce((currentValue, array) => {
        db[array.val] ? '' : db[array.val] = true && currentValue.push(array);
        return currentValue;
    }, [])
    return this.obj
};
console.log(objFun())

你可能感兴趣的:(es6数组去重的常用方法)