JavaScript数组去重的两种方法推荐
需积分: 0 142 浏览量
更新于2020-11-29
收藏 34KB PDF 举报
1、数组去重;
Array类型并没有提供去重复的方法,如果要把数组的重复元素干掉,那得自己想办法:
方法一:利用indexOf方法;
var aa=[1,3,5,4,3,3,1,4]
function arr(arr) {
var result=[]
for(var i=0; i<arr.length; i++){
if(result.indexOf(arr[i])==-1){
result.push(arr[i])
}
}
console.log(result)
}
arr(aa)
方法二:
function unique(arr) {
v
在JavaScript编程中,数组去重是一项常见的操作,用于去除数组中的重复元素,使得数组只包含唯一的值。在JavaScript中,Array类型本身并没有提供内置的去重方法,因此我们需要自定义函数来实现这一功能。这里推荐两种不同的方法:
方法一:利用`indexOf()`方法
这种方法的基本思路是遍历数组,对每个元素进行检查。如果该元素在新数组`result`中不存在(即`indexOf()`返回值为-1),则将该元素添加到新数组中。这种方法虽然直观,但效率较低,因为每次检查都需要遍历新数组。以下是对这种方法的代码实现:
```javascript
var aa = [1, 3, 5, 4, 3, 3, 1, 4];
function arr(arr) {
var result = [];
for (var i = 0; i < arr.length; i++) {
if (result.indexOf(arr[i]) === -1) {
result.push(arr[i]);
}
}
console.log(result);
}
arr(aa);
```
方法二:双重循环检查
这种方法通过两层循环实现,外层循环遍历原数组,内层循环检查新数组`result`中是否存在当前元素。如果存在,则跳过此元素;否则,将元素添加到结果数组中。这种方法虽然清晰,但由于需要进行两层循环,效率比方法一更低。以下是代码实现:
```javascript
function unique(arr) {
var result = [], isRepeated;
for (var i = 0, len = arr.length; i < len; i++) {
isRepeated = false;
for (var j = 0, len = result.length; j < len; j++) {
if (arr[i] === result[j]) {
isRepeated = true;
break;
}
}
if (!isRepeated) {
result.push(arr[i]);
}
}
return result;
}
```
方法三:利用哈希表(HashTable)
为了提高效率,可以使用哈希表(在JavaScript中可以使用对象)来存储已经遇到过的元素。这种方法的时间复杂度为O(n),因为哈希表的查找时间复杂度接近常数。以下是改进后的代码:
```javascript
function unique(arr) {
var result = [], hash = {};
for (var i = 0, elem; (elem = arr[i]) != null; i++) {
if (!hash[elem]) {
result.push(elem);
hash[elem] = true;
}
}
return result;
}
```
在这三种方法中,第三种方法利用哈希表提供了最佳的性能。在处理大量数据时,这种方法的优势尤为明显。因此,在实际开发中,我们通常选择使用哈希表来实现数组去重,以保证程序的运行效率。
weixin_38605801
- 粉丝: 10
- 资源: 984
最新资源
- 手套手势检测7-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 学生成绩链表处理-C语言实现学生成绩链表处理技术解析与应用
- html + css 淘宝网实战
- 手手势检测3-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 通讯录排序-使用Python实现通讯录多规则排序方法
- 数据库概念设计ER图练习题.doc
- 使用aws的s3协议实现全部云管理的如cos,oss的对象存储文件上传案例
- 基于Java web SSM框架的实验室管理系统(源码+数据库).zip
- ER图练习题答案.doc
- JESD209-5C LPDDR5/5X JESD原版协议
- er图习题大全.docx
- 基于多个TCP连接的TCPserver转串口 可以实现通过注册包区分多个TCP连接,实现特定TCP连接和串口之间的数据转发
- 手机、钱包、笔记本检测34-YOLO(v5至v11)、COCO、CreateML、Paligemma、VOC数据集合集.rar
- 磁盘调度算法的Python实现及优化策略
- 已知A点到任意多边形距离最小,求该多边形最小距离点的坐标
- MyBatis中文帮助文档