本文主要介绍了JavaScript数组去重算法,结合实例形式总结分析了JavaScript数组去重相关的读写、遍历、比较、排序等操作及算法改进相关实现技巧,需要的朋友可以参考下
测试用例:
arr = ["1",3,"1",1,4,5,1,"2",5,1,{"name":"li","age":20},2,4,3,{"name":"li","age":20},""];
方法一:借助于临时数组与indexOf , 算法复杂度为:O(n^2)
function unique1(arr){
var temp = [];
for(var i=0; i<arr.length; i++){
if(temp.indexOf(arr[i]) == -1){
temp.push(arr[i]);
}
}
return temp;
}
测试结果:
unique1(arr) : ["1", 3, 1, 4, 5, "2", Object { name="li", age=20}, 2, Object { name="li", age=20}, ""]
bug 无法区分对象
方法二 : 用JavaScript中的Object对象来当作hash表
function unique2(arr){
var temp=[];
var hash={};
for(var i=0; i<arr.length;i++){
if(!hash[arr[i]]){
hash[arr[i]]=true;
temp.push(arr[i]);
}
}
return temp;
}//欢迎加入全栈开发交流圈一起学习交流:864305860
测试结果:
unique2(arr) : ["1", 3, 4, 5, "2", Object { name="li", age=20}, ""]
bug : 无法区分: 1 和 "1"
修改
function unique2(arr){
var temp=[];
var hash={};
for(var i=0; i<arr.length;i++){
var item = arr[i];
var key = typeof(item)+item;
if(!hash[key]){
hash[key]=true;
temp.push(arr[i]);
}//欢迎加入全栈开发交流圈一起学习交流:864305860
}//面向1-3年前端人员
return temp;//帮助突破技术瓶颈,提升思维能力
}
测试结果:
unique2(arr) : ["1", 3, 1, 4, 5, "2", Object { name="li", age=20}, 2, ""]
方法三:先用sort对数组排序,然后借助临时数组,存储相同元素的最后一个,该方法只能用于纯Number类型数组
function unique3(arr){
arr.sort(function(a,b){
return a-b;
});
var temp = [];
for(var i=0;i<arr.length;i++){
if(arr[i] !== arr[i+1]){
temp.push(arr[i]);
}
}//欢迎加入全栈开发交流圈一起学习交流:864305860
return temp;//面向1-3年前端人员
}//帮助突破技术瓶颈,提升思维能力
结语
感谢您的观看,如有不足之处,欢迎批评指正。
本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。
对web开发技术感兴趣的同学,欢迎加入Q群:864305860,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。
网友评论