
已解决问题
谷歌a1037589803用户在2016.04.19提交了关于“张继科js数组去重的三种常用方法总结”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-27T22:35:51。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,没有什么华丽的语言,但是我对你的感谢不会减少 !
详细问题描述及疑问:期待您的答案,没有什么华丽的语言,但是我对你的感谢不会减少 !
第一种是比较常规的方法
思路:
1.构建一个新的数组存放结果
2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
3.若结果数组中没有该元素,则存到结果数组中
复制代码代码如下:
Array.prototype.unique1=function(){
varres=[this[0]];
for(vari=1;i<this.length;i++){
varrepeat=false;
for(varj=0;j<res.length;j++){
if(this[i]==res[j]){
repeat=true;
bre**;
}
}
if(!repeat){
res.push(this[i]);
}
}
returnres;
}
vararr=[1,'a','a','b','d','e','e',1,0]
alert(arr.unique1());
第二种方法比上面的方法效率要高
思路:
1.先将原数组进行排序
2.检查原数组中的第i个元素与结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
3.如果不相同,则将该元素存入结果数组中
复制代码代码如下:
Array.prototype.unique2=function(){
this.sort();//先排序
varres=[this[0]];
for(vari=1;i<this.length;i++){
if(this[i]!==res[res.length-1]){
res.push(this[i]);
}
}
returnres;
}
vararr=[1,'a','a','b','d','e','e',1,0]
alert(arr.unique2());
第二种方法也会有一定的局限性,因为在去重前进行了排序,所以最后返回的去重结果也是排序后的。如果要求不改变数组的顺序去重,那这种方法便不可取了。
第三种方法(推荐使用)
思路:
1.创建一个新的数组存放结果
2.创建一个空对象
3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。
复制代码代码如下:
Array.prototype.unique3=function(){
varres=[];
varjson={};
for(vari=0;i<this.length;i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]]=1;
}
}
returnres;
}
vararr=[112,112,34,'你好',112,112,34,'你好','str','str1'];
alert(arr.unique3());