ES6:数组去重的方法

36 篇文章 0 订阅
12 篇文章 1 订阅

结论先行:

① 使用 Set 数据结构:因为该结构中的元素是唯一的,不允许重复

将数组转换为 Set,然后再将 Set 转换回数组来实现去重

② 使用 filter() 方法:遍历数组,筛选出不重复的元素

③ 使用 reduce() 方法:遍历数组,将不重复的元素添加到累积的结果数组中

④  for 循环嵌套,利用 splice 去重

⑤ 新建数组,利用 includes 去重

⑥ 先用 sort 排序,然后用一个指针从第0位开始,配合 while 循环去重

具体解析:

1、使用Set数据结构

Set 是 ES6 引入的一种数据结构,其中的元素是唯一的,不允许重复。可以通过将数组转换为Set,然后再将 Set 转换回数组来实现去重。

[...new Set(array)]

const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = [...new Set(array)];
console.log(uniqueArray); // 输出 [1, 2, 3, 4, 5]

Array.from(new Set(array))

var arr = [1, 1, 2, 2, 3, 4, 5, 5, 4, 3, 2, 1]
// Array.from() 方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。
console.log(Array.from(new Set(arr))) // [1, 2, 3, 4, 5]

2、使用 filter() 方法

利用 filter() 方法遍历数组,筛选出不重复的元素

const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = array.filter((element, index, self) => {
  return self.indexOf(element) === index;
});
console.log(uniqueArray); // 输出 [1, 2, 3, 4, 5]

3、使用 reduce() 方法

使用 reduce() 方法遍历数组,将不重复的元素添加到累积的结果数组中。

const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = array.reduce((accumulator, currentValue) => {
  if (!accumulator.includes(currentValue)) {
    accumulator.push(currentValue);
  }
  return accumulator;
}, []);
console.log(uniqueArray); // 输出 [1, 2, 3, 4, 5]

4、for循环嵌套,利用 splice 去重

具体实现: 

function uniqueArr(arr) {
    for (let i = 0; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            if (arr[i] == arr[j]) {
                arr.splice(j, 1)
                j--
            }
        }
    }
    return arr
}
console.log(uniqueArr([1, 1, 2, 2, 3, 4, 5, 5, 4, 3, 2, 1])) // [1, 2, 3, 4, 5]
console.log(uniqueArr([1, 1, 2, 5, 6, 3, 5, 5, 6, 8, 9, 8])) //  [1, 2, 5, 6, 3, 8, 9]

5、新建数组,利用 includes 去重

具体实现: 

function uniqueArr(arr) {
    let resArr = []
    arr.forEach(item => {
        if (!res.includes(item)) {
            res.push(item)
        }
    });
    return resArr
}
console.log(uniqueArr([1, 1, 2, 2, 3, 4, 5, 5, 4, 3, 2, 1])) // [1, 2, 3, 4, 5]

6、先用 sort 排序,然后用一个指针从第0位开始,配合 while 循环去重

具体实现: 

        function uniqueArr(arr) {
            arr.sort()
            let pointer = 0
            while (arr[pointer]) {
                if (arr[pointer] == arr[pointer + 1]) {
                    // 删除下一项
                    arr.splice(pointer + 1, 1)
                } else {
                    // 指针往下移
                    pointer++
                }
            }
            return arr
        }
        console.log(uniqueArr([1, 1, 2, 2, 3, 4, 5, 5, 4, 3, 2, 1]))
        console.log(uniqueArr([1, 1, 2, 5, 6, 3, 5, 5, 6, 8, 9, 8]))

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值