不畏惧失败是创造力的一个基本要素。——<艾尔文·兰德博士>
作者:Ashish Lahoti
译者:cl9000
来源:https://codingnconcepts.com/javascript/how-to-remove-array-duplicates-in-javascript/
在本教程中,我们将学习如何从 JavaScript
中的数组中删除重复项并仅返回唯一值。
这是从数组中删除重复项的不同方法的快速视图:
1 | // Array: |
1. 使用 ES6 的 Set()
如果你已经开始使用ES6,那么建议使用Set对象。
Set
对象允许您存储任何类型的唯一值,无论是原始值还是对象引用。
当你将一个数组传递给新的Set()
对象时,它会删除任何重复的值。让我们看看代码中发生了两件事:
- 首先,我们通过传递一个数组来创建一个新的
Set
对象,该数组删除了重复项。 - 其次,我们使用
spread operator…
将该对象转换回一个数组。
1 | const fruits = ['apple', 'orange', 'orange', 'apple', 'banana', 'apple']; |
另外,您也可以使用 Array.from
将转换 Set
为数组:
1 | const fruits = ['apple', 'orange', 'orange', 'apple', 'banana', 'apple']; |
2. 使用 Array.filter()
filter()
方法根据我们提供的条件从数组中滤除元素。换句话说,
- 如果条件返回true,它将包含在过滤后的数组中
- 如果条件返回false,则不会将其包含在过滤后的数组中
1 | const fruits = ['apple', 'orange', 'orange', 'apple', 'banana', 'apple']; |
在这里,Array.indexOf()
方法的使用非常重要,如果有重复的话,它可以使您第一次出现元素。让我们看一下代码:
1 | const fruits = ['apple', 'orange', 'orange', 'apple', 'banana', 'apple']; |
3. 使用 Array.forEach()
forEach()
方法还可以用于循环遍历数组中的元素,并将元素push()
到新数组中,但新数组中并不存在。
1 | const fruits = ['apple', 'orange', 'orange', 'apple', 'banana', 'apple']; |
4. 使用 Array.reduce()
reduce()
方法用于减少数组的元素,并根据传递的某些reducer
函数将它们组合成一个新数组。
在本例中,reducer
函数检查新数组是否包含该项。如果没有,则将该项推入新数组。否则,跳过该元素并按原样返回新数组。
Reduce总是有点难以理解。让我们看一下代码:
1 | const fruits = ['apple', 'orange', 'orange', 'apple', 'banana', 'apple']; |
5. 性能
我们已经创建了一个包含100万个随机数(从1到1000)的数组。让我们检查一下每种方法的性能。
1 | // Array: |
这里是我在MacBook Pro的Chrome v83.0.4103.106(64位)上运行上述代码的结果:
1 | set: 23.051025390625ms |
我们看到 ES6 Set
对象是一个明显的赢家,后面跟着forEach
循环。强烈建议使用ES6 Set
从数组中删除重复项,因为它的语法简洁,性能也很好。
参考
- https://codingnconcepts.com/javascript/how-to-remove-array-duplicates-in-javascript/
- MDN - https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Set
- https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
- https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
- MDN - https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
关注【公众号】,了解更多。
关注【公众号】,了解更多。
关注【公众号】,了解更多。
赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!