JS数组去重的9种方法

实现JS数组去重的代码有以下几种方法 :

1.利用双重for循环方法,也是最原始的方法。

const arr = [1,2,2,3,3,3,4];
for (var i = 0; i < arr.length; i++) {
   for (var j = i+1; j < arr.length; j++) {
       if (arr[i]===arr[j]) {
            arr.splice(j,1);
            j--; // 防止只删除其中一个重复元素,而遗漏后面的重复元素
       } 
   }
}
console.log(arr); // [1,2,3,4]

2.使用for循环,利用indexOf方法判断数组的相同元素索引是否相等,如果不相等,就删除此数据

const arr = [1,2,3,3,4,4,4,5];
for (var i = 0; i < arr.length; i++) {
  if (arr.indexOf(arr[i])!==i) {
      arr.splice(i,1);
      i--;
  }
}
console.log(arr); // [1,2,3,4,5]

3.使用for循环,利用indexOf方法判断数组的相同元素索引是否相等,如果相等,添加到新数组里面

const arr = [1,2,2,3,3,3,4];
const newArr = [];
for (var i = 0; i < arr.length; i++) {
    if (arr.indexOf(arr[i]) === i){
        newArr.push(arr[i])
    }
}
console.log(newArr); // [1,2,3,4]

4.使用filter方法筛选数组,其实和2,3差不多

const arr = [1,2,2,3,3,3,4];
const newArr = arr.filter((item,index,arrs) => arrs.indexOf(item)===index);
console.log(newArr); // [1,2,3,4]

5.利用forEach + includes 方法遍历数组

const arr = [1,2,2,3,3,3,4];
const newArr = []; //创建新数组将不重复的部分push进去
arr.forEach(item => {
    // 利用includes方法判断数据是否已经存在与原数组中
    if (!newArr.includes(item)) {
        newArr.push(item);
    }
});
console.log(newArr); // [1,2,3,4]

 6.利用indexOf方法判断数组中是否存在某个元素,如果不存在返回-1,则向新数组中添加该元素(类似于方法5,只不过一个是includes判断数据是否存在,另外一个是indexOf判断)。

const arr = [1,2,2,3,3,3,4];
const newArr = [];
for (var i = 0; i<arr.length; i++) {
    if (newArr.indexOf(arr[i])===-1) {
        newArr.push(arr[i])
    }
}
console.log(newArr); // [1,2,3,4]

7.利用es6中的Set数据结构,利用Set数据结构中数据唯一的特性。

const arr = [1,2,2,3,3,3,4];
const newArr = [...new Set(arr)];
// 或 使用Array.from()方法,都是将类数组转化为数组形式
// const newArr = Array.from(new Set(arr));
console.log(newArr); // [1,2,3,4]

 8.同样使用es6 中的Set数据结构:将数组转换为Set对象,Set对象会自动去除重复元素,之后再将Set对象转换为数组。

const arr = [1,2,2,3,3,3,4,5];
var newArray = Array.from(new Set(arr));
//或者 var newArray = [...new Set(arr)]; 都是将类数组转化为数组
console.log(newArray); // [1, 2, 3, 4, 5]

9.使用es6 中的Map数据结构结合filter方法:

const arr = [1,2,2,3,3,3,4];
var o = new Map();
const newArr = arr.filter(item => !o.has(item) && o.set(item,1)); // 这里的1可以是任意值,主要还是前面 o.has()方法进行是否有值的判断,filter方法返回一个符合条件的新数组;
console.log(newArr); // [1,2,3,4]

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值