ES6的Set方法去重–最简单
new Set是ES6新推出的一种类型。他和数组的区别在于,Set类型中的数据不可以有重复的值。当然,数组的一些方法Set也无法调用。
使用方法:将数组转化为Set数据类型,再转化回来,就完成了去重。
const arr = [1,2,3,3,3,3,4,5,5,6,6,7,7,7,7,9,9,9,9,9];
const arr2= new Set(arr);
console.log(Array.from(arr2));
//输出:[1,2,3,4,5,6,7,9]
缺点:无法去重引用类型的数据。比如对象数组。
双重for循环去重
//双重循环去重
//双重循环去重
const handleRemoveRepeat = (arr) => {
for (let i=0,len = arr.length; i < len; i++) {
for (let j = i + 1; j < len; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
len--;
}
}
}
return arr;
};
indexOf去重
indexOf方法确实比双重for循环简单,但是没Set方法去重来的更简单。
const handleRemoveRepeat = (arr) => {
let repeatArr = [];
for (let i = 0,len = arr.length ; i < len; i++)
if (repeatArr.indexOf(arr[i]) === -1) repeatArr.push(arr[i])
return repeatArr;
}
includes去重
类似于indexOf的去重方法,使用includes的去重方法和indexOf不能说很像,基本上一模一样。变换的仅仅只是判断方法。
includes的判断方法更简单了。循环数组的每一样,用新数组检测当前数组中是否包含数组项,如果不包含,则追加该元素。
const handleRemoveRepeat = (arr) => {
let repeatArr = [];
for (let i = 0,len = arr.length ; i < len; i++)
if (!repeatArr.includes(arr[i])) repeatArr.push(arr[i])
return repeatArr;
}
filter去重
使用filter配合indexOf进行的去重。
//去重
const handleRemoveRepeat = (arr) => arr.filter((item,index) => arr.indexOf(item,0) === index);
indexOf的特性是返回被查找的目标中包含的第一个位置的索引。