第一种:先sort排序后去重
const arr = [1,2,3,4,3,21,2];
arr.sort(function(a,b){
return a-b; // 数组按从小到大排序(PS:从大到小也行)
})
const newArr = [];
for(var i = 0;i<arr.length;i++){
if(arr[i] != arr[i+1]){
newArr.push(arr[i]); // 比较当前数值arr[i]与下一个数值arr[i+1]是否相等,不相等才进行push操作
}
}
console.log(newArr) // [1, 2, 3, 4, 21]
第二种:使用filter函数
const arr = [1,2,3,4,3,21,2];
const newArr = arr.filter(function(item,index,Array){
return Array.indexOf(item) === index; //判断indexOf获得的下标和当前的数值的下标是否相等
})
console.log(newArr); // [1, 2, 3, 4, 21]
//或
const arr = [1,2,3,4,3,21,2];
const newArr = arr.filter(function(item,index,arr){
return arr.lastIndexOf(item) === index;//判断lastIndexOf获得的下标和当前的数值的下标是否相等
})
console.log(newArr); // [1, 4, 3, 21, 2]
**注:**indexOf 和 lastIndexOf均能实现效果,区别在于:执行的方向不一样,indexOf从左到右搜索,而lastIndexOf相反
第三种:使用includes方法
const arr = [1,2,3,4,3,21,2];
const newArr = [];
for(let i=0; i<arr.length; i++){
if(!newArr.includes(arr[i])){
newArr.push(arr[i]);
}
}
console.log(newArr);
第四种:使用Set函数
const arr = [1,2,3,4,3,21,2];
const newArr = Array.from(new Set(arr));
console.log(newArr); // [1, 2, 3, 4, 21]
//或使用Set和扩展运算符
const arr = [1,2,3,4,3,21,2];
const newArr = [...new Set(arr)];
console.log(newArr); // [1, 2, 3, 4, 21]
第五种
const arr = [1,2,3,4,3,21,2];
const temp = {}
arr.forEach(item => temp[item] = item);
const newArr = Object.values(temp)
console.log(newArr); // [1, 2, 3, 4, 21]