JavaScript数组去重六种实现方案详解
作者:代码拾荒时间:2026-10-30 14:57:42浏览:562
本文系统总结了JavaScript中数组去重的六种常见实现方式。涵盖利用对象属性、双层循环、递归排序、indexOf结合forEach、ES6 Set以及展开运算符等技巧。每种方法均附带代码示例与原理分析,帮助开发者根据性能需求与兼容性要求选择最优方案。
前言
前言
JavaScript数组去重背景
在JavaScript开发过程中,处理数组元素重复是常见需求。由于原生Array对象未直接提供去重方法,开发者需自行实现相关逻辑。本文汇总了多种JavaScript数组去重方案,供读者参考。
方法一:利用对象属性不重复特性
方法一:利用对象属性不重复特性
对象属性去重代码实现
Array.prototype.distinct = function (){
var arr = this,
i,
obj = {},
result = [],
len = arr.length;
for(i = 0; i< arr.length; i++){
if(!obj[arr[i]]){ //如果能查找到,证明数组元素重复了
obj[arr[i]] = 1;
result.push(arr[i]);
}
}
return result;
};
方法二:双层循环对比值
方法二:双层循环对比值
双层循环去重代码实现
Array.prototype.distinct = function(){
var arr = this,
result = [],
i,
j,
len = arr.length;
for(i = 0; i < len; i++){
for(j = i + 1; j < len; j++){
if(arr[i] === arr[j]){
j = ++i;
}
}
result.push(arr[i]);
}
return result;
}
方法三:数组递归去重
方法三:数组递归去重
递归排序去重代码实现
Array.prototype.distinct = function (){
var arr = this,
len = arr.length;
arr.sort(function(a,b){ //对数组进行排序才能方便比较
return a - b;
})
function loop(index){
if(index >= 1){
if(arr[index] === arr[index-1]){
arr.splice(index,1);
}
loop(index - 1); //递归loop函数进行去重
}
}
loop(len-1);
return arr;
};
方法四:利用indexOf及forEach
方法四:利用indexOf及forEach
indexOf与forEach去重代码实现
Array.prototype.distinct = function (){
var arr = this,
result = [],
len = arr.length;
arr.forEach(function(v, i ,arr){ //这里利用map,filter方法也可以实现
var bool = arr.indexOf(v,i+1); //从传入参数的下一个索引值开始寻找是否存在重复
if(bool === -1){
result.push(v);
}
})
return result;
};
方法五:利用ES6的Set
方法五:利用ES6的Set
ES6 Set去重代码实现
function dedupe(array){
return Array.from(new Set(array));
}
dedupe([1,1,2,3]) //[1,2,3]
方法六:使用拓展运算符配合for...of循环
方法六:使用拓展运算符配合for...of循环
拓展运算符去重代码实现
let arr = [3,5,2,2,5,5];
let unique = [...new Set(arr)]; //[3,5,2]
总结
总结
结语
以上即为文章全部内容。个人倾向于使用方法一,因其不修改原数组。希望本文能为您提供帮助,如有疑问欢迎留言交流。
作者最新文章
JavaScript异步发送HTTP请求时怎么优雅地处理错误
2026-11-05 17:10:44
5款主流JS在线运行工具对比:CodePen、JSFiddle与StackBlitz怎么选
2026-11-05 17:04:04
JavaScript入门书籍避坑:这些书不适合初学者
2026-11-05 16:31:15
JS使用Math.round实现保留两位小数的原理与代码
2026-11-05 15:35:55
JavaScript 原生 Date 对象怎么实现日期加减
2026-11-05 14:30:00
