修行第一步先定义数组 var arr = [1, 2, 2, 6, 3, 4, 4, 5]; (以下q,x,item,index均为形参,arr1即去重后的数组)
1 new Set
原理:set本身特性不允许有重复值
var arr1 = [...new Set(arr)];
//或
var arr1 = Array.from(new Set(arr));
2 reduce + includes
原理:遍历判断数组是否已包含该元素
let arr1 = arr.reduce((q, x) => {
return q.includes(x) ? q : q.concat(x);
}, []);
3 reduce + indexOf
原理:遍历判断元素在数组中是否已出现,q.indexOf(x)返回 -1说明元素不在数组中
let arr1 = arr.reduce((q, x) => {
return q.indexOf(x) == -1 ? q.concat(x) : q;
}, [])
//或
let arr1 = arr.reduce((q, x) => {
q.indexOf(x) === -1 && q.push(x);
return q;
}, []);
4 filter + indexOf
原理:遍历筛选数组中首次出现的元素,arr.indexOf(item)仅返回item首次出现的索引,index表示元素当前索引,故元素首次出现时等式才成立
let arr1 = arr.filter((item, index) => {
return arr.indexOf(item) === index;
});