本文介绍了JavaScript中实现数组去重的四种常用方法:通过双重循环比较并移除重复项、利用新数组结合indexOf判断、借助对象记录元素出现次数,以及先排序再去除相邻重复元素。每种方法均附有完整代码示例,帮助开发者根据实际需求选择合适的去重方案。
双重循环去重法
第一种方法采用双重循环机制。外层循环遍历数组中的每个元素,内层循环从当前元素的下一个位置开始向后查找。一旦发现重复元素,立即使用splice方法将其移除,并调整索引以避免跳过后续元素。这种方法直接修改原数组,无需额外空间存储新数组,但时间复杂度较高,为O(n^2)。
var ary=[1,2,3,3,2,3,4,5];
for(var i=0;i<ary.length;i++){
for(var j=i+1;j<ary.length;j++){
if(ary[i]===ary[j]){
ary.splice(i,1);
i--;
}
}
}
alert(ary);
新数组结合indexOf法
第二种方法通过创建新数组来实现去重。遍历原数组,利用indexOf方法检查当前元素是否已存在于新数组中。若不存在(indexOf返回-1),则将该元素推入新数组。此方法保留了原数组不变,代码简洁易懂,但同样存在时间复杂度为O(n^2)的性能瓶颈,适用于小规模数据。
var ary=[1,2,3,3,2,3,4,5];
var ary1=[];
for(var i=0;i<ary.length;i++){
if(ary1.indexOf(ary[i])==-1){
ary1.push(ary[i]);
}
}
alert(ary1);
对象记录频次法
第三种方法利用对象属性来记录元素出现次数。首先遍历原数组,将每个元素作为对象的键,值为其出现的次数。若元素已存在,则计数加一;否则初始化为1。随后遍历对象的所有键,将这些键(即去重后的元素)推入新数组。这种方法能同时统计元素频次,但对象键默认转为字符串,可能导致数字与字符串混淆,需注意类型一致性。
var ary=[1,2,3,3,2,3,4,5];
var obj={};
for(var i=0;i<ary.length;i++){
var cur=ary[i];
if(obj[cur]){
obj[cur]++;
}else{
obj[cur]=1;
}
}
var ary=[];
for(var attr in obj){
ary.push(attr);
}
alert(ary);
排序后相邻去重法
第四种方法基于排序思想。首先对数组进行升序排序,使得相同元素相邻。然后遍历排序后的数组,比较当前元素与下一个元素是否相等。若相等,则使用splice移除当前元素,并调整索引。排序后去重通常比前几种方法效率更高,尤其适合大规模数据,但排序操作本身的时间复杂度为O(n log n),且会改变原数组顺序。
var ary=[1,2,3,3,2,3,4,5];
ary.sort(function(a,b){return a-b;});
for(var i=0;i<ary.length;i++){
if(ary[i]===ary[i+1]){
ary.splice(i,1);
i--;
}
}
alert(ary);
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持本站!