在js中数组去重的方法有很多种,下面是我稍微总结的几种数组去重的方法,如果大家有更好的方法,欢迎下方留言。
方法一 向空数组插入元素的方法
定义一个空数组,对原数组进行循环遍历,每次遍历查找判断新数组中有没有该元素,如果没有则向新数组中插入该元素。
function noRepeat(arr){
var NewArr = [];
for(var i = 0; i < arr.length; i++){
if(NewArr.indexof(arr[i])<0){
NewArr.push(i);
}
}
return NewArr;
}
方法二 For循环嵌套使用splice()方法去重
外层循环下标i从0到length-1,内层循环下标j从i+1到length,外层循环每次执行,都要判断当前下标i以后的所有元素有没有与当前下标元素相等的值,如果有则使用arr.splice()方法移除,并让j–,进行下一次判断。
function noRepeat(arr){
for(var i = 0; i < arr.length-1; i++){
for(var j = i+1; j < arr.length; j++){
if(arr[i]===arr[j]){
arr.splice(j,1);
j--;
}
}
}
return arr;
}
方法三 使用sort()排序 用For循环判断相邻元素
先使用sort()方法将数组排序,然后使用For循环,两两比较,如果相邻两个元素相等,则使用splice()方法移除后面的相同元素,并让i–,惊醒下一次循环判断。
function noRepeat(arr){
arr.sort();
for(var i = 0; i < arr.length-1; i++){
if(arr[i]===arr[i+1]){
arr.splice(i+1,1);
i--;
}
}
return arr;
}
方法四 结合对象和数组的特点
把数组的元素看成是对象的属性,如果属性值为undefined,证明不含属性名,可以赋值为1,如果下次再次出现属性,证明是重复的值,可以扔掉。
function noRepeat(arr){
var obj = {};
var newArr = [];
for(var i = 0; i < arr.length; i++){
if(obj[arr[i]]===undefined){
obj[arr[i]] = 1;
newArr.push(arr[i]);
}
}
return newArr;
}
方法五 ES6的数组去重方法
利用set集合里的所有元素都是唯一的这一特点。
function noRepeat(arr) {
return Array.from(new Set(arr))
}