js中数组的去重
1.利用循环将数组的每一个元素依次与其他元素做比较,若发现重复元素,将其删除删除。
var arr = [1,2,3,4,3,2,5,6,7,7,7,7,9,23,25];
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;
}
var arr1 = noRepeat(arr);
console.log(arr1); //[1,2,3,4,5,6,7,9,23,25]
2.利用空对象来记录新数组中已经存储过的元素,再将其添加到新数组中。
var arr = [1,2,3,4,3,2,5,6,7,7,7,7,9,23,25];
var obj={};
var newArr=[];
for(var i=0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]]=true;
newArr.push(arr[i]);
}
}
console.log(newArr); //[1,2,3,4,5,6,7,9,23,25]
3.借助indexOf()方法判断此元素在该数组中首次出现的位置下标与循环的下标是否相等,不相等说明有重复,删除。
var arr = [1,2,3,4,3,2,5,6,7,7,7,7,9,23,25];
function noRepeat(arr) {
for (var i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) != i) {
arr.splice(i,1);//删除数组元素后数组长度减1,后面的元素会前移
i--;//数组的索引页要改变
}
}
return arr;
}
var newArr = noRepeat(arr);
console.log(newArr); //[1,2,3,4,5,6,7,9,23,25]
4.借助新数组 ,通过indexOf方判断当前元素在数组中的索引如果与循环的下标相等,添加到新数组中。
var arr = [1,2,3,4,3,2,5,6,7,7,7,7,9,23,25];
function noRepeat(arr) {
var temp = [];
for (var i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) == i) {
temp.push(arr[i]);
}
}
return temp;
}
var arr1 = noRepeat4(arr);
console.log(arr1); //[1,2,3,4,5,6,7,9,23,25]
6.借助新数组,判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中
var arr = [1,2,3,4,3,2,5,6,7,7,7,7,9,23,25];
function noRepeat(arr){
var newArr = [];
for(var i = 0; i < arr.length; i++){
if(newArr.indexOf(arr[i]) == -1){
newArr.push(arr[i]);
}
}
return newArr;
}
var arr1 = noRepeat(arr);
console.log(arr1); //[1,2,3,4,5,6,7,9,23,25]
7.借助ES6提供的Set数据结构
var arr = [1,2,3,4,3,2,5,6,7,7,7,7,9,23,25];
function noRepeat(arr){
var newArr = [];
var myset = new Set(arr);//利用了Set数据结构不能接收重复数据的特点
for(var val of myset){
newArr.push(val)
}
return newArr;
}
var arr1 = noRepeat(arr)
console.log(arr1); //[1,2,3,4,5,6,7,9,23,25]