Javascript中的数组去重问题

来源:互联网 发布:三维平面布置图软件 编辑:程序博客网 时间:2024/06/05 16:17

在论坛上看到了有关于数组去重的问题,思考了一下相出了第一种方法

var arr=[1,2,3,4,5,1,2,3,4,6,7];var newArr=[];for(var i=0;i<arr.length;i++){//通过indexof方法检索arr中的值,indexof方法在不到相同的值时会返回-1    if(newArr.indexof(arr[i])==-1){        newArr.push(arr[i]);    }} //将方法抽象function getNewArr(a){    var newArr=[];    for(var i=0;i<a.length;i++){        if(newArr.indexOf(a[i])==-1){        newArr.push(a[i]);        }    }    return newArr;}var arr=[1,2,3,4,5,1,2,3,4,6,7];getNewArr(arr);

后来朋友告诉我可以用哈希表做,我还特意去百度了哈希表是个什么东西;得到了下面的代码

function getNewArr(a){    var newArr={};    var result=[];    var len=a.length;    for(var i=0;i<len;i++){        if(!newArr[a[i]]){            newArr[a[i]]=true;            result.push(a[i]);        }    }    return result;}var arr=[1,2,3,4,3,2,5];console.log(getNewArr(arr))//1,2,3,4,5;
  1. 开始 i=0;a[i]=1 newArr={} result=[] newArr[a[i]]是不存在的,所以!newArr[a[i]]会走if中间的代码;
  2. 然后i=1;a[i]=2 newArr={1:true} result=[1] newArr[2]也是不存在的,所以 也会走if的代码,
  3. 直到i=4;a[i]=3newArr={1:true,2:true,3:true,4:true},newArr[3]=true;这个值存在了,就不会走if中的代码,所以第二个3就被忽略了得到的result就是[1:true,2:true,3:true,4:true]所以可以达到去掉重复数组的效果;

实不相瞒,ES6给出了一个更简单的方法;使用 Set 以及 Array.from 方法去重,实测只要一行代码

function unique(a) {  return Array.from(new Set(a));}

Set()方法是一组key值的集合,他并不会存储value值,当你的key值重复了他就自动帮你过滤了,可以达到数组去重

原创粉丝点击