前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >javascript数组去重的N种方法

javascript数组去重的N种方法

作者头像
挥刀北上
发布2019-08-06 16:26:59
8450
发布2019-08-06 16:26:59
举报
文章被收录于专栏:Node.js开发Node.js开发
上一篇文章笔者演示了javascript如何将多

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

代码语言:javascript
复制
var arr = [1,2,3,4,5,5,5,5,1,1,2,2,3,4,5,6,7,5,3];

去重之后的结果:

代码语言:javascript
复制
[ 1, 2, 3, 4, 5, 6, 7 ]

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

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

代码语言: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))

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

第二种方法如下:

代码语言:javascript
复制
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方法检验每一项,如果不存在将其推入数组,循环完成后,返回新数组。

第三种方法如下:

代码语言:javascript
复制
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)

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

第四种方法:

代码语言:javascript
复制
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中数组去重的几种常用方法,第二种最好理解,第三种扩展性最好。当然还有其他方法,大家可以留言,把你知道的方法分享给大家。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 nodejs全栈开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档