数组去重的方法

思路一:

  1. 双层循环,外层循环元素,内层循环时比较值
  2. 如果有相同的值则跳过,不相同则push进数组
    Array.prototype.distinct = function(){    var arr = this,            result = [],            i,            j,            len = arr.length;
    
        for(i = 0; i < len-1; i++){        for(j = i + 1; j < len; j++){            if(arr[i] === arr[j]){                j = ++i;            }        }        result.push(arr[i]);    }    return result;}var arra = [1,2,3,4,4,1,1,2,1,1,1];console.log(arra.distinct()) //[3,4,2,1];

    思路二:利用splice直接在原数组进行操作

    1. 双层循环,外层循环元素,内层循环时比较值
    2. 值相同时,则删去这个值

    注意点:删除元素之后,需要将数组的长度也减1.

    Array.prototype.distinct = function (){
        var arr = this,
            i,
            j,
            len = arr.length;
    
        for(i = 0; i < len; i++){
            for(j = i + 1; j < len; j++){
                if(arr[i] == arr[j]){
                    arr.splice(j,1);
                    len--;
                    j--;
                }
            }
        }
        return arr;
    };
    
    var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
    var b = a.distinct();
    console.log(b.toString()); //1,2,3,4,5,6,56

    思路三:利用对象的属性不能相同的特点进行去重

    Array.prototype.distinct = function (){
        var arr = this,
            i,
            obj = {},
            result = [],
            len = arr.length;
    
        for(i = 0; i< arr.length; i++){
            if(!obj[arr[i]]){    //如果能查找到,证明数组元素重复了
                obj[arr[i]] = 1;
                result.push(arr[i]);
            }
        }
        return result;
    };
    
    var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
    var b = a.distinct();
    console.log(b.toString()); //1,2,3,4,5,6,56

    思路四、数组递归去重

    1. 运用递归的思想
    2. 先排序,然后从最后开始比较,遇到相同,则删除
    Array.prototype.distinct = function (){
        var arr = this,
            len = arr.length;
    
        arr.sort(function(a,b){        //对数组进行排序才能方便比较
            return a - b;
        })
    
        function loop(index){
            if(index >= 1){
                if(arr[index] === arr[index-1]){
                    arr.splice(index,1);
                }
                loop(index - 1);    //递归loop函数进行去重
            }
        }
        loop(len-1);
    
        return arr;
    };
    
    var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,56,45,56];
    var b = a.distinct();
    console.log(b.toString());        //1,2,3,4,5,6,45,56

    思路五、利用indexOf以及forEach

    Array.prototype.distinct = function (){
        var arr = this,
            result = [],
            len = arr.length;
    
        arr.forEach(function(v, i ,arr){        //这里利用map,filter方法也可以实现
            var bool =  arr.indexOf(v,i+1);        //从传入参数的下一个索引值开始寻找是否存在重复 v是数组中的每一个元素,i是数组中该元素对应的索引值
            if(bool === -1){
                result.push(v);
            }
        })
    
        return result;
    };
    
    var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3];
    var b = a.distinct();
    console.log(b.toString());    //1,23,2,3
时间: 2024-10-26 11:27:04

数组去重的方法的相关文章

js 数组去重的方法总结

想沉淀一下自己.代码改变世界~~~ 1.利用Array.from代码如下 1 var arr = [1,2,3,4,3,2,1] 2 function unique(arr){ 3 return Array.from(new Set(arr)) 4 } 5 console.log(unique(arr)) 2.利用es6(...)拓展运算符.demo 1 var arr = [1,2,3,4,3,2,1] 2 function unique(arr){ 3 return [...new Set(

数组去重的方法总结

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>数组去重的 3种方法</title> </head> <body> <script type="text/javascript"> var demoAr = [3,4,5,5,7,2,1,4,3]; /

js数组去重的方法

1.如果不借助任何方法,初级写法应该是: function unique(arr){ var res=[]; for(var i=0,len=arr.length;i<len;i++){ var obj = arr[i]; for(var j=0,jlen = res.length;j<jlen;j++){ if(res[j]===obj) break; } if(jlen===j)res.push(obj); } return res; } var arr=[1,1,'2','1',3,4]

5个数组去重的方法

1.遍历数组法 最简单的去重方法:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持,需多写一些兼容低版本浏览器代码 function unique1(array){ var n = []; for(var i = 0; i < array.length; i++){ //如果当前数组的第i已经保存进了临时数组,那么跳过,否则把当前项push到临时数组里面 if (n.indexOf(arra

几种数组去重的方法

<script type="text/javascript">window.onload=function(){ /*数组去重方法一*//*var arr=[1,1,2,545,5,15,156,1,5,15]; var arr1=[]; for(var i=0;i<arr.length;i++){ if(arr1.indexOf(arr[i])==-1){ arr1.push(arr[i]); }; }; alert(arr1); */ /*数组去重方法二*//*

indexof实现数组去重的方法,有三个版本,一个Js版本,2个augular版本

先上Js的简化版本的数组去重,需要M层控制数据 大妈 1 var aa = [1,3,4,5,6,23,523,6,123,'1',12,'刘','刘','刘','翔',12,123,214,'1','3','刘翔','刘翔']; 2 3 function arr(arr){ 4 var result = []; 5 for (var i=0;i<arr.length;i++) { 6 if (result.indexOf(arr[i]) == -1) { 7 result.push(arr[i

Javascript中的数组去重-indexof方法

在Javascript中,有时我们会用到数组去重.我在这里给大家介绍一下本人认为最简单实用的一种方法-indexOf()去重. 1 var arr = [1,1,1,2,2,2,3,3,4,5,6,2,1]; 2 var arr2 = []; 3 for(var i = 0;i < arr.length;i++){ 4 if(arr2.indexOf(arr[i]) == -1){ 5 arr2.push(arr[i]) 6 } 7 } 8 console.log(arr2) //[1,2,3,

数组去重--ES6方法

数组去重方法1:用es6的set和...扩展运算符 let arr = [1,2,3,4,4,5,2]; console.log([...new Set(arr)]) // [1, 2, 3, 4, 5] ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x)); for (l

JS数组去重 ES6 方法

let arr = [0, 0, 0, 0, 1, 2, 3, 4, 4, 5, 2, 3, 3, 3, 9, 8, 9]; //数组去重法1 console.log(Array.from(new Set(arr))); //数组去重法2 console.log(...new Set(arr)); //数组去重法3 let newarr = []; for (var i = 0; i < arr.length; i++) { if (newarr.indexOf(arr[i]) == -1) {