数组去重的几种方式

数组去重有很多种方式,最常用的就是使用Set进行去重,除了这种方式你还能想到其他的吗?今天就让我们一起聊聊关于数组去重的几种方式。

1、filter()和indexOf()实现去重

let originalArray = [1, 2, 3, 4, 1, 2, 3, 4]


let uniqueArray = originalArray.filter((item, index, array) => {
  return array.indexOf(item) === index
})


// uniqueArray === [1, 2, 3, 4]

这里的基本策略是遍历originalArray并检查我们当前检查的项的索引是否与originalArray中的项的索引相同。

因为indexOf返回它为给定值找到的第一个索引,如果它不是重复值,那么该项的索引必须相同!

2、reduce()和includes()实现去重

let originalArray = [1, 2, 3, 4, 1, 2, 3, 4]


let uniqueArray = originalArray.reduce((unique, item) => {
  unique.includes(item) ? unique : [...unique, item]
}, [])


// uniqueArray === [1, 2, 3, 4]

这里的策略是在reducer函数的“累加器”中保存一个唯一项的运行列表。对于原始列表中的每个项目,我们检查累加器是否包括正在考虑的项目。

如果它确实包含该项,则返回累加器而不做任何更改,实际上是“跳过”该项。

如果它不包含该项,请将累加器中的值分散到一个新数组中,然后添加正在考虑的项。

includes返回一个布尔值——如果在数组中找到该值,则返回true;否则返回false。这个布尔值驱动我们的条件,决定如何处理每个值。

我发现这种方法不那么直观,也更难理解,但它很管用。

还要注意reducer函数之后传入的空数组是累加器的起始值,因此第一次通过reduce,unique是一个空数组。

3、Set实现去重

let originalArray = [1, 2, 3, 4, 1, 2, 3, 4]


let uniqueArray = array => [...new Set(array)]


// or


let uniqueArray = Array.from(new Set(originalArray))


// uniqueArray = [1, 2, 3, 4]

这种方法利用了在ES6中引入的Set对象的能力。

集合保证保留插入项的顺序,并且只包含唯一值。因此,根据定义,集合不可能包含重复项!

这里我们调用Set对象的构造函数,将我们想要从中构造集合的数组传递给它。然后,一旦我们删除了所有重复项并将剩余值存储在我们的集合中,我们将转换回一个数组并返回结果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值