JS数组去重方法总结:indexOf, lastIndexOf, filter
184 浏览量
更新于2024-08-28
收藏 78KB PDF 举报
"这篇资源是作者在大学四年的学习中总结的JavaScript数组去重方法,适合面试准备。文章提到了一些基础的JS数组知识,并推荐了相关参考资料,然后详细介绍了三种常用的去重方法:indexOf、lastIndexOf和filter与indexOf的组合使用。"
在JavaScript中,数组去重是一个常见的需求,尤其在处理数据清洗或优化数据结构时。这里作者分享了三种实用的方法:
1. 使用indexOf()方法去重
`indexOf()`方法查找数组中指定元素的首次出现位置,如果不存在则返回-1。基于此,我们可以遍历数组,对于每个元素,如果它不在新数组的新建副本`newArr`中,就将其添加到`newArr`。这种方法效率较低,因为每次检查都需要遍历整个新数组。
示例代码:
```javascript
var arr = [1, 1, 2, 2, 3, 3, 4, 4];
var newArr = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
console.log(newArr); // 输出:[1, 2, 3, 4]
```
2. 使用lastIndexOf()方法去重
`lastIndexOf()`方法类似于`indexOf()`,但它从数组末尾开始查找。这使得在某些情况下,如果数组中有重复元素,它可以帮助我们保留最后一个元素。同样,这种方法也需要遍历整个数组。
示例代码:
```javascript
function noRepeat(arr) {
var res = [];
for (var i = 0; i < arr.length; i++) {
if (res.lastIndexOf(arr[i]) === -1) {
res.push(arr[i]);
}
}
return res;
}
console.log(noRepeat([1, 1, 2, 2, 3, 3, 4, 4])); // 输出:[4, 3, 2, 1]
```
3. 使用filter()与indexOf()结合去重
`filter()`方法创建一个新的数组,其中包含通过所提供函数实现的测试的所有元素。将`indexOf()`作为过滤条件,如果元素在新数组中不存在,那么将元素添加到结果中。
示例代码:
```javascript
function uniqueByFilter(arr) {
return arr.filter(function(item, index) {
return arr.indexOf(item, 0) === index;
});
}
console.log(uniqueByFilter([1, 1, 2, 2, 3, 3, 4, 4])); // 输出:[1, 2, 3, 4]
```
以上是JavaScript中数组去重的几种基本方法。除此之外,随着ES6的引入,`Set`结构成为更简洁的去重工具,因为它不允许重复元素。例如:
```javascript
let uniqueArr = [...new Set([1, 1, 2, 2, 3, 3, 4, 4])]; // 输出:[1, 2, 3, 4]
```
了解并熟练掌握这些方法对于JS开发者来说至关重要,特别是在面试中,能够体现出对数据结构和算法的理解程度。
2020-12-11 上传
2018-11-29 上传
2023-11-05 上传
2023-10-12 上传
2023-10-25 上传
2023-05-24 上传
2023-05-02 上传
2023-09-02 上传
weixin_38659955
- 粉丝: 4
- 资源: 915
最新资源
- capstone2
- goservice:使用go和etcd发现和注册工具
- tidy000000.rar
- WITSML client:******注意:该软件已过时! ******-开源
- Ruby on Rails开发 从入门到精通实战教程.rar
- STATUS_INVALID_IMAGE_HASH.zip
- jQuery实现导航栏上下滑动效果,鼠标离开菜单后,导航自动回复原状,兼容主流浏览器
- Proyecto_concu
- iot-coap:使用CoAP协议进行物联网学习
- VC++漂亮的自绘菜单源码,模仿早期的QQ菜单
- openshift-diy-spring-boot-sample:openshift-diy-spring-boot-sample
- Grid++Report6.0易语言静态编译6.0测试.rar
- jenkins jmeter ant build.xml
- 防刷刷-迅速了解商品优缺点-crx插件
- WST 500.12-2016电子病历共享文档规范第12部分:麻醉术后访视记录.pdf.rar
- servlet-3-e-fundamentos-web