玖叶教程网

前端编程开发入门

分享4组超实用的JavaScript数组去重方法

学习了就要学以致用,不思考就不会记得牢,所以脑袋里面的第一个想法就是数组去重,在网上也百度了一下,很多公司面试的时候有很大的几率会问数组去重的问题。所以今天我就给大家分享我所用过的四种数组去重的方法。

1、 第一种办法主要是用两个循环来遍历整个数组,从第一个开始跟后面的比较,找到一样的就删除后面重复的值。数组去重无非就是找到两个以上重复的值,保留其中一个就可以了,这种办法很好理解,但是效率不高。代码如下:

function delRepeat(arr){

for(var i=0;i<arr.length-1;i++){//从数组第一个开始跟第二个数比较,总共要比较arr.leng-1次

for(var j<i+1;j<arr.length;j++){

if(arr[i]===arr[j]){//这里最好写三个等号,因为三个等号才代表全等。

arr.splice(j,1);//splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。第一个值代表的是数组下表,代表从那个下表开始删除第二个值代表删除的值的数量。

j--; //防止错错重复数组元素

}

}

}return arr;

}

2、第二种办法是利用对象属性名不能重复的原理来去重的,这个也是我写的这几种方法里面,去重效率最高的一种,代码如下:

function delRepeat(arr){

var obj={};

var newArr=[];

for(var i=0;i<arr.length;i++){

if(!obj[arr[i]]){//利用对象属性名不能重复,判断当前的对象中有没有这个属性值;

obj[arr[i]]=1;//如果当前对象没有这个值,就给这个对象里面的属性值赋值为"1",{arr[i]:1}。

newArr.push(arr[i]);//push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。这里是把找到的数组值放到一个新的数组(arr1)中。

}

}

return newArr;

}

备注:js对象是一种复合类型,它允许你通过变量名存储和访问,换一种思路,对象是一个无序的属性集合,集合中的每一项都由名称和值组成。比如是var obj={id:1,name:" Timmy"}

3、 第三种方法是利用Set结构的属性来去重,代码如下:

function delRepeat(arr){

return Array.from(new Set(arr));

}

/*Set集合是默认去重复的,添加的两个元素如果严格相等就不会添加进去;两个new出来的字符串也不相等。*/

备注:Set是ES6 提供了新的数据结构 。它类似于数组,但是成员的值都是唯一的,没有重复的值。(不包括空对象),所以可以用这个办法来数组去重。

4、第四种方法原理其实跟第一种差不多的,不过分成了两个函数来写,第一个函数来找到数组中某一个值有没有重复的,要是没有就返回false,第二个函数就来遍历整个数组,每个都来调用第一个函数,从而达到数组去重的。

/*判断数组中是否有某个元素

*arr array 要去重的数组

* value 数组中的值

**/

function has(arr, value) {

for (var i = 0;i < arr.length; i++) {

if (arr[i] === value)

return true;

}

return false;

}

function delRepeat(arr){

var newArr = [];

for (var i = 0;len = arr.length; i < len; i++) {

if(has(newArr, arr[i]) === false) {// 调用第一个函数has(),调用arr.length次函数 ,把没有重复的值放到一个新的数组。

newArr.push(arr[i]);//前面有提到push的用途,就是给数组末尾添加一个或者多个值,这里是给newArr里面存放没有重复的数组值。 }

}

return newArr;

}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言