js数组去重的几种方法
Posted 天空003
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js数组去重的几种方法相关的知识,希望对你有一定的参考价值。
假定现有数组:var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5];,如何去除重复的元素并返回?[1,23,3,5,6,7,9,8]
1.将数组的每一个元素依次与其他元素做比较,发现重复元素,利用数组方法splice()删除重复元素
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5]; 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 arr2 = norepeat(arr); console.log(arr2); //[1, 23, 3, 5, 6, 7, 9, 8]
2.使用双层循环改变原数组
var arr = [1,1,2,2,3,3,4,4,5,5,4,3,1,2,6,6,6,6]; console.log(arr); function norepeat(arr){ for(var i=0;i<arr.length;i++){ for(var j=0;j<arr.length;j++){ if(arr[i] == arr[j] && i !=j){ arr.splice(j,1); } } } return arr; } var arr2=norepeat(arr); console.log(arr2); //[1, 2, 3, 4, 5, 6]
3.借助新数组,判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中(原数组长度不变但被按字符串顺序排序)
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5]; console.log(arr); function norepeat(arr){ var temp=[]; var end; //临时变量用于对比重复元素 arr.sort(); end=arr[0]; temp.push(arr[0]); for(var i=1;i<arr.length;i++){ if(arr[i] !=end){ //当前元素如果和临时元素不等则将此元素添加到新数组中 temp.push(arr[i]) end=arr[i] } } return temp; } var arr2=norepeat(arr); console.log(arr2); //[1, 23, 3, 5, 6, 7, 8, 9]
4.创建一个新数组,判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5]; console.log(arr); function norepeat(arr){ var temp =[]; for(var i=0;i<arr.length;i++){ if(temp.indexOf(arr[i]) == -1){ temp.push(arr[i]); } } return temp; } var arr2=norepeat(arr); console.log(arr2);//[1, 23, 3, 5, 6, 7, 9, 8]
5.借助indexOf()方法判断此元素在该数组中首次出现的位置下标与循环的下标是否相等
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5]; console.log(arr); 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 arr2 = norepeat(arr); console.log(arr2); //[1, 23, 3, 5, 6, 7, 9, 8]
6.创建一个新数组 通过indexOf方判断当前元素在数组中的索引如果与循环的下标相等则添加到新数组中
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5]; console.log(arr); 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 arr2=norepeat(arr); console.log(arr2); //[1, 23, 3, 5, 6, 7, 9, 8]
7.利用数组中的filter方法
var arr = ["apple","banana","pear","apple","orange","orange"]; console.log(arr); var arr2 =arr.filter(function(value,index,self){ return self.indexOf(value) ===index; }); console.log(arr2); //["apple", "banana", "pear", "orange"]
8.利用空对象来记录新数组中已经存储过的元素
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5]; console.log(arr); var obj={}; var arr2=[]; for(var i=0;i<arr.length;i++){ if(!obj[arr[i]]){ obj[arr[i]]=true; arr2.push(arr[i]); } } console.log(arr2); //[1, 23, 3, 5, 6, 7, 9, 8]
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5]; console.log(arr); function norepeat(arr){ var temp; arr.sort(); temp=arr[0]; for(var i=1;i<arr.length;i++){ if(arr[i]==temp){ //当前元素如果和临时元素相等则将此元素从数组中删除 arr.splice(i,1); i--; }else{ temp=arr[i]; } } return arr; } var arr2=norepeat(arr); console.log(arr2); //[1, 23, 3, 5, 6, 7, 8, 9]
转载于:https://blog.csdn.net/xing476255461/article/details/100067006
以上是关于js数组去重的几种方法的主要内容,如果未能解决你的问题,请参考以下文章