数组去重方法汇总
2019-11-15 本文已影响0人
倚剑闯天涯_
1.Es6 新增的 set 去重
类似数组,但是它有一大特性就是所有元素都是唯一的,没有重复。因此,我们可以利用这一唯一特性进行数组的去重工作,这种方式代码是最少的,在不考虑性能的情况下,这是最方便的
function wipeRepeat(arr) {
let set = new Set(arr); //此时的set是一个对象
arr1 = [...set]; //利用扩展运算符展开赋值,生成一个新的数组
return arr1;
}
let newArr = [1, 2, 3, 4, 5, 1, 1, 1, 1];
console.log(wipeRepeat(newArr)); //[1,2,3,4,5]
2.forEach+indexOf 去重
利用数组的 forEach, indexOf 方法,判断数组中是否有这一项,然后放入到一个新的数组里面
function wipeRepeat(arr) {
let newArr = []; //定义一个空数组,来存放重复的值
arr.forEach(item => {
if (newArr.indexOf(item) == -1) {
//判断空数组中是否有这个值,如果没有,就放到这个数组中,否则则不
newArr.push(item);
}
});
return newArr;
}
let arr = [1, 2, 2, 2, 2, 2, 2, 3];
console.log(wipeRepeat(arr)); //[1,2,3]
3.使用数组 filter+indexOf 方法
使用数组的 filter()方法过滤出第一次出现的某个值
function wipeRepeat(arr) {
return arr.filter((item, index) => {
return arr.indexOf(item) === index;
});
}
let arr = [1, 2, 3, 3, 3, 3, 3];
console.log(wipeRepeat(arr)); //[1,2,3]
4.数组 sort 结合 for 循环
数组 sort 排序,然后遍历两者比较,把不相同的一方放入到一个新的数组里面
function wipeRepeat(arr) {
let arr1 = []; //定义一个空数组
arr.sort((a, b) => {
//利用sort()方法对数组进行排序,如果相同放在一起
return a - b;
});
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== arr[i - 1]) {
//前后比较,不同的话的就放入到一个新的数组里面
arr1.push(arr[i]);
}
}
return arr1;
}
let arr = [1, 3, 2, 3, 2, 4];
console.log(wipeRepeat(arr)); //[1,2,3,4]
5.利用 JavaScript 对象的特点
利用对象的属性不能重复的特点结合 for 循环实现数组去重(一个键名和一个键值称为是一个属性)
function wipeRepeat(arr) {
let newArr = [];
let obj = {};
for (var i = 0; i < arr.length; i++) {
//判断对象中是否有这个属性名
if (!obj[arr[i]]) {
//如果没有的话,赋值为1,例{1:1,2:1,3:1}
obj[arr[i]] = 1;
newArr.push(arr[i]); //然后根据索引把这些不重复的值放入新的数组中
}
}
return newArr;
}
let arr = [1, 2, 2, 3, 4];
console.log(wipeRepeat(arr)); //[1,2,3,4]
6.数组的 includes 方法;
利用数组的 includes 方法,判断一个数组中是否有某个值,如果没有,就放到一个新的数组里面
function wipeRepeat(arr) {
let newArr = []; //空数组用来存放重复的数值
for (let i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) {
//判断新数组中是否包含这个值
newArr.push(arr[i]);
}
}
return newArr; //返回这个新的数组
}
let arr = [1, 3, 3, 3, 4];
console.log(wipeRepeat(arr)); //[1,3,4]
7.双重 for 循环比较
利用循环两两比较,结合数组的 splice 方法,进行截取
function wipeRepeat(arr) {
for (let i = 0; i < arr.length; i++) {
//自身不用跟自身进行比较,截取的时候会改变数组的长度,所以要进行j--
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
let arr = [1, 3, 3, 3, 4];
console.log(wipeRepeat(arr)); //[1,3,4]
数组去重的方法还有好多种,我这个只是写出了几个日常生活中常用的一些去重的方法,如果还有一些简便快捷的方法,希望大家评论区给我留言,大家一起共同进步
————————————————
版权声明:本文为CSDN博主「handsomeYnb」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45356397/article/details/103049653