资讯专栏INFORMATION COLUMN

JS数组去重的几种方法

Hwg / 3127人阅读

摘要:提供了新的数据结构。它类似于数组,但是成员的值都是唯一的,没有重复的值。这里当然也可以用来判断是否存在

数组去重

1 双层for循环(类似冒泡排序的双层循环写法)

var arr = [2,3,4,2,34,21,1,12,3,4,1]for(var i =0;i<arr.length;i++){    //第一层:每次循环拿到arr中一个元素	for(var j=i+1;j<arr.length;j++){        //第二层:每次拿到的元素再和每次拿到的元素后边的元素依次进行比对(因为第一个要从第二个开始比,第二个要从第三个比以此类推,所以这里的j应比i大1为j=i+1)    	if(arr[i] === arr[j]){            //如果相同就删除后边的元素        	arr.splice(j,1)    	}    }}//arr:[1, 2, 3, 4, 12, 21, 34]

2 循环和indexof、循环和includes

创建新数组,循环旧数组,看每次循环的元素是否存在于新数组中没有就把当前元素添加到新数组中

//indexofvar arr = [2,3,4,2,34,21,1,12,3,4,1]var arr2 = []arr.forEach((e)=>{    if(arr2.indexOf(e)==-1){        arr2.push(e)    }})console.log(arr2)//arr2:[1, 2, 3, 4, 12, 21, 34]
//includesvar arr = [2,3,4,2,34,21,1,12,3,4,1]var arr2 = []arr.forEach((e)=>{    if(!arr2.includes(e)){        arr2.push(e)    }})console.log(arr2)//arr2:[1, 2, 3, 4, 12, 21, 34]

3 利用对象属性不能重复去重

var arr = [2,3,4,2,34,21,1,12,3,4,1]var obj = {};arr.forEach((e,i)=>{    obj[arr[i]] = "abc";   });var arr2=Object.keys(obj)console.log(arr2)//arr2:["1", "2", "3", "4", "12", "21", "34"]var arr3 = arr2.map(e => ~~e )//arr3:[1, 2, 3, 4, 12, 21, 34]//注意这种方法不仅给数组重新排列而且还改变了数组中元素的类型

~是js里的按位取反操作符,~~就是执行两次按位取反,其实就是保持原值,但是注意虽然是原值,但是对布尔型变量执行这个操作,会转化成相应的数值型变量,也就是 ~~true === 1,~~false === 0。

4 ES6 Set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

var arr = [2,3,4,2,34,21,1,12,3,4,1]var arr1 = [...new Set(arr)]console.log(arr1)//arr1:[1, 2, 3, 4, 12, 21, 34]

5 ES6 Array. prototype.filter()

注:indexOf在数组中找元素的时候,碰到符合条件的第一个就会把它的下标返回

var arr = [2,3,4,2,34,21,1,12,3,4,1]var arr2 = arr.filter((e,i)=>{    //看每次循环的元素在数组中出现的第一个下标位置(indexOf返回的位置),和每次循环的元素的下标(filter循环每次的i)是否一致,一致就说明他就是第一个符合条件,不会被过滤掉。    return arr.indexOf(e)==i;})console.log(arr2)//arr2:[1, 2, 3, 4, 12, 21, 34]

6 ES6 Array. prototype.reduce()

var arr = [2,3,4,2,34,21,1,12,3,4,1]var arr2 = arr.reduce((pre,e)=>{    //这里当然也可以用indexOf来判断是否存在    pre.includes(e)?pre:pre.push(e);    return pre},[])console.log(arr2)//arr2:[1, 2, 3, 4, 12, 21, 34]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121247.html

相关文章

  • js数组去重几种方法

    摘要:三种方法利用判断新数组中实际上也是使用的类似的传入数组如果当前数组的第已经保存进了临时数组,那么跳过,否则把当前项到临时数组里面利用判断旧数组结果数组如果当前数组的第项在当前数组中第一次出现的位置不是,那么表示第项是重复的,忽略掉。 三种方法 利用indexOf判断新数组 underscore.js中实际上也是使用的类似的indexOf //传入数组 functio...

    mykurisu 评论0 收藏0
  • JS去重几种实现方法

    摘要:方法新特性方法利用对象名唯一方法利用数组包含方法排序比较兄弟元素方法双循环比较 方法1:ES6新特性Set Array.prototype.rmSome = function() { return Array.from(new Set(this)); } 方法2:利用对象名唯一 Array.prototype.rmSome = function() { let te...

    shengguo 评论0 收藏0
  • 数组去重--这几种方法够不?

    摘要:数组去重是校招面试的必考知识点。以下就是笔者所实现的数组去重的几种简单的方式。结合实现这种方法的关键点就是判断是否相同的时候不要忽略对元素类型的判断。以上就是笔者所想到的几个数组去重的方式大家如果有更好的方法欢迎留言。 数组去重,是校招面试的必考知识点。简单的说,数组去重就是将一个数组中的相同的元素删除,只保留其中的一个。这里的相同其实是一个陷阱,有好多同学只认为值相等即为相同,而忽略...

    wendux 评论0 收藏0
  • js去重几种方法

    摘要:去重真的是面试必考啊。下标判断,也可以对象的键值还要先排序 js去重真的是面试必考啊。 es6 set function duplicate(arr){ return [...new Set(arr)] } indexOf下标判断,lastIndexOf也可以 function duplicate2(arr){ let res=[]; arr.forEach((item)...

    cnio 评论0 收藏0
  • JS数组重的集中方案

    摘要:去重的几种方案双层循环排序后比较相邻元素是否相等压入数组有限制,但效率高高性能数组去重 JS去重的几种方案 new Set() 双层for循环 + splice Array.fliter + indexof Arroy.sort + 排序后比较相邻元素是否相等压入数组 for ... of + includes for ... of + object 有限制,但效率高 JS高性能数组...

    wslongchen 评论0 收藏0

发表评论

0条评论

Hwg

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<