js 数组去重

xiaoxiao2021-02-28  94

1、前言

去重方法千千万万,你要哪一种

2、es系列方法

2.1、es6 Set()方法

介绍:ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化

new Set(test);//test为去重的数组

2.2、es7 includes

Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。该方法属于 ES7 ,但 Babel 转码器已经支持

unique4 (arr) { let newArr = [arr[0]]; for(index of arr){ if(!newArr.includes(index)){ newArr.push(index); } } return newArr; }

3、常规去重

 思路:

构建一个新的数组存放结果,设置状态值 从原数组中循环取出一个元素,与结果数组对比 若结果数组中没有该元素,则改变状态值  通过判断状态值进行结果数组的存储

核心代码:

unique1 (arr) { let newArr = [arr[0]];//现将第一个数加入到新数组中; arr.shift(); let result = true;//判断是否重复,默认不存在重复true for(index of arr) { for(res of newArr) { if(res === index){ result = false;//存在重复改变状态值 break; } } if(result){ newArr.push(index);//不存在重复则加入新数组 } result = true;//循环解析重新改变状态值 } return newArr; },

3、排序去重

思路:

对数组进行排序(由于打乱了数组结构,不适用于需要保留原数组顺序的) 判断第 i 个数组元素是否和 i-1 个数组元素相同,  如果不相同,则表示新数组中不存在该元素,可以加入

核心代码:

unique2 (arr) { arr.sort();//对数组进行排序 let newArr = [arr[0]];//现将第一个数加入到新数组中;这里移除 let len = arr.length; //跳过数组第一个元素,从第二个开始 for(let i = 1; i < len; i++) { //如果前后不相同,则不存在重复 if(arr[i] !== arr[i-1]) { newArr.push(arr[i]); } } return newArr; },

5、对象去重

思路:

创建一个新数组存储结果,空对象将这个值作为属性并赋值,进行存储  循环取出数组元素去对象中访问对应属性,  如果存在则重复,不能加入数组

核心代码:

unique3 (arr) { let newArr = []; let newObj = {};//定义一个对象,通过对象来获取值 for(index of arr) { //如果这个属性不存在,则可以加入数组,并复制 if(!newObj[index]) { newArr.push(index); newObj[index] = 1; } } return newArr; }

6、结语

去重的方式还有很多,等待你去探索。。。

转载请注明原文地址: https://www.6miu.com/read-21859.html

最新回复(0)