javascript数组去重的N种方法

上一篇文章笔者演示了javascript如何将多

那什么是数组去重呢?简单理解就是将数组中重复项去掉,演示demo如下:

var arr = [1,2,3,4,5,5,5,5,1,1,2,2,3,4,5,6,7,5,3];

去重之后的结果:

[ 1, 2, 3, 4, 5, 6, 7 ]

以上便是数组去重,那么如何运用javascript对数组去重呢?

首先看第一种方法,代码如下:

var arr = [1,2,3,4,5,5,5,5,1,1,2,2,3,4,5,6,7,5,3];
function forarr(arr){
    let newarr = [...arr]
    for(var i=0;i<newarr.length;i++){
        for(var j=i+1;j<newarr.length;j++){
            if(newarr[i]===newarr[j]){
                newarr.splice(j,1);
                j--
            }
        }
    }
    return newarr;
}
console.log(forarr(arr))

这段代码使用了循环嵌套,首先循环遍历数组中每一项,然后用每一项和当前项后面的数组元素比对,相同的话,将其从数组中删除,依次循环完成,达到去重目的。

第二种方法如下:

var arr = [1,2,3,4,5,5,5,5,1,1,2,2,3,4,5,6,7,5,3];
function filterarr(arr){
    let newarr = [];
    for(var i = 0;i<arr.length;i++){
        if(newarr.indexOf(arr[i])===-1){
            newarr.push(arr[i])
        }
    }
    return newarr
}
var newarr = filterarr(arr);
console.log(newarr)

这个方法比较好理解,新建一个空数组,循环数组每一项,用空数组的indexOf方法检验每一项,如果不存在将其推入数组,循环完成后,返回新数组。

第三种方法如下:

var arr = [1,2,3,4,5,5,5,5,1,1,2,2,3,4,5,6,7,5,3];
function fileterhash(arr){
    var obj = {};
    var newarr = [];
    for(var i=0;i<arr.length;i++){
        console.log(obj[arr[i]])
        if(obj[arr[i]]==undefined){
            obj[arr[i]]={};
            obj[arr[i]].value = arr[i];
            obj[arr[i]].count = 0;
            newarr.push(arr[i])
        }else{
            obj[arr[i]].count =obj[arr[i]].count+1;
        }
    }
    return newarr
}
var newarr = fileterhash(arr);
console.log(newarr)

这种方法和上一种类似,这种方法首先定义了一个空对象和一个空数组,然后循环数组,循环过程中,将数组的每一项作为对象的属性进行判断赋值。如果属性存在,说明数组元素重复直接跳过,属性不存在,说明数组元素为重复,将其推进空数组。依次循环,最后返回填充完成的新数组。这样做有什么好处呢?如果在去重的基础上需要计算出每个元素在数组中出现的次数,这种方法就很合适了。

第四种方法:

var arr = [1,2,3,4,5,5,5,5,1,1,2,2,3,4,5,6,7,5,3];
function filterreduce(arr){
   return arr.reduce((pre,cur)=>{
        if(pre.indexOf(cur)==-1){
         return   [...pre,cur]
        }else{
            return  pre
        }
    },[]);
}
var newarr = filterreduce(arr);
console.log(newarr)

这种方法运用了javascript数组的叠加器reduce方法,开始的时候传递一个空数组,用这个空数组去和后面的每一项做判断,判断结果不重复的话,将后面的一项填充进数组,并返回,重复的话不做添加,直接返回。

reduce是javascript中一个非常好用的函数,希望大家可以掌握。

以上便是javascript中数组去重的几种常用方法,第二种最好理解,第三种扩展性最好。当然还有其他方法,大家可以留言,把你知道的方法分享给大家。

原文发布于微信公众号 - nodejs全栈开发(geekclass)

原文发表时间:2018-01-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券