Javascript 数组去重的9种方法

本文详细介绍了JavaScript中9种不同的数组去重方法,包括ES5中的常见方法,利用indexOf、filter、reduce等方法,以及ES6中Set和Map的新特性。通过实例解析了各种方法的实现原理和适用场景,帮助开发者掌握数组去重的多种技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


为数组去重是前端学习过程中比较重要的一个点,今天就需要将各种去重的方法梳理一遍。

方法

1. ES5 中常使用的去重方法

function deduplicate(arr) {
   for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if (arr[i] == arr[j]) {
                arr.splice(j, 1);
                j--;
            }
        }
    }
    return arr;
}
var arr = [1, 1,"u", "u", undefined, undefined, true, true];
console.log(deduplicate(arr));
  • 内层循环判断值,如果两个值相等就需要使用数组的splice 方法去除
  • 外层循环整体次数

注意 : 去重的时候,NaN=== 是无法比较相等的,每个NaN都是不等的

2. 利用sort() 方法去重

function deduplicate(arr) {
	arr = arr.sort()
	  var arrry = [arr[0]];
	  for (var i = 1; i < arr.length; i++) {
	      if (arr[i] !== arr[i - 1]) {
	          arrry.push(arr[i]);
	      }
	  }
	  return arrry;
	}
var arr = [1, 1,"u", "u", undefined, undefined, true, true];
console.log(deduplicate(arr))
  • sort() 方法用于对数组的元素进行排序。
  • push() 方法用于对数组末尾添加一个或多个元素,并返回新的长度。

3. 利用indexOf() 方法去重

function deduplicate(arr) {
    var array = [];
    for (var i = 0; i < arr.length; i++) {
        if (array .indexOf(arr[i]) === -1) {
            array .push(arr[i])
        }
    }
    return array;
}
var arr = [1, 1,"u", "u", undefined, undefined, true, true];
console.log(deduplicate(arr))
  • indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果没有找到匹配的字符串则返回 -1。
  • indexOf() 判断是否存在,存在写入,不存在跳过

4. 利用includes() 方法去重

function deduplicate(arr) {
    var array =[];
    for(var i = 0; i < arr.length; i++) {
		if( !array.includes( arr[i]) ) {
	    	array.push(arr[i]);
	     }
	}
    return array
}
var arr = [1, 1,"u", "u", undefined, undefined, true, true];
console.log(deduplicate(arr))
  • includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
  • 判断数组中是否存在相同的元素,如果没有存进去,有跳出

5. 利用filter() 方法去重

function deduplicate(arr) {
	return arr.filter(fn);
}
function fn(item, index, arr){
	return arr.indexOf(item, 0) === index;
}
var arr = [1, 1,"u", "u", undefined, undefined, true, true];
console.log(deduplicate(arr));
  • 当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素

6. 利用Set() 去重

function deduplicate(arr) {
  return Array.from(new Set(arr))
}
var arr = [1, 1,"u", "u", undefined, undefined, true, true];
console.log(deduplicate(arr))
  • 利用Set() 特性 : 每个值在Set中只能出现一次 (不允许内部出现重复元素),来使数组去重
  • 根据ES6语法,可以简化 :
	[...new Set(arr)]

7. 利用Map() 去重

function deduplicate(arr) {
	let map = new Map();
  	let array = new Array();  
  	for (let i = 0; i < arr.length; i++) {
    	if(map .has(arr[i])) {  
     	 	map .set(arr[i], true);
    	} else {
      		map .set(arr[i], false);  
      		array .push(arr[i]);
    	}
  }
  return array ;
}
var arr = [1, 1,"u", "u", undefined, undefined, true, true];
console.log(deduplicate(arr));
  • 数组用于返回结果
  • map.has() 判断数组里有没有该值

8. 利用递归方法去重

function deduplicate(arr) {
        var array= arr;
        var lengths = array.length;
    array.sort(function(a,b){  
        return a - b;
    })
    function loop(index){
        if(index >= 1){
            if(array[index] === array[index-1]){
                array.splice(index,1);
            }
            loop(index - 1);    
        }
    }
    loop(lengths-1);
    return array;
}
var arr = [1, 1,"u", "u", undefined, undefined, true, true];
console.log(deduplicate(arr))
  • 先利用 sort() 方法排序,排序之后更加直观
  • 递归 loop()

9. 利用hasOwnProperty()方法去重

function deduplicate(arr) {
    var obj = {};
    return arr.filter(fn);
}
function fn(item, index, arr){
	return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
}
var arr = [1, 1,"u", "u", undefined, undefined, true, true];
console.log(deduplicate(arr))
  • hasOwnProperty判断对象是否包含特定的自身(非继承)属性(返回的使Boolean值)
### 安装 DETR 框架 为了安装 DETR(End-to-End Object Detection with Transformers),可以按照以下方式操作。DETR 是一种基于 Transformer 的目标检测框架,依赖于 PyTorch 和其他一些库。 #### 1. 安装 PyTorch 首先需要确保已正确安装 PyTorch。可以通过官方推荐的方式选择适合的操作系统和硬件配置来安装[^3]: ```bash pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 ``` 如果使用的是 CPU 版本,则可改为如下命令: ```bash pip install torch torchvision torchaudio ``` #### 2. 使用清华镜像加速安装基础包 对于国内用户来说,建议通过清华大学开源软件镜像站加快安装速度。例如,安装 `requests` 或其他可能需要的基础工具时,可以这样操作[^1]: ```bash pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple ``` #### 3. 克隆 DETR 仓库并安装依赖项 克隆 DETR 的 GitHub 仓库,并进入项目目录后运行安装脚本: ```bash git clone https://github.com/facebookresearch/detr.git cd detr pip install -r requirements.txt ``` 此步骤会自动安装所需的 Python 库,比如 `Cython`, `numpy`, `scipy` 等。 #### 4. 编译 COCO API 工具 DETR 需要 COCO 数据集的支持,因此还需要编译 COCO API 工具: ```bash apt-get update && apt-get install -y libjpeg-dev zlib1g-dev cd datasets/coco_api/ make cp -r pycocotools <path_to_your_python_env>/lib/pythonX.Y/site-packages/ ``` 其中 `<path_to_your_python_env>` 表示当前环境路径,具体取决于所用虚拟环境的位置。 #### 5. 下载预训练权重文件 最后一步是从 Hugging Face Model Hub 或者 Facebook Research 提供的链接下载预训练模型参数以便快速测试效果[^4]: ```python import torch.hub model = torch.hub.load('facebookresearch/detr', 'detr_resnet50', pretrained=True) model.eval() ``` 以上即完成了整个 DETR Framework 的搭建过程。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值