首页 > 代码库 > web前端面试系列 - 算法( 数组去重 )
web前端面试系列 - 算法( 数组去重 )
1. 思路:设置一个临时数组temp,然后遍历要去重的数组arr,如果arr中的元素能够在temp中找到,则跳过此元素,否则将此元素存入temp,最后返回temp。
实现一
1 function unique(arr){2 var temp = [];3 var len = arr.length;4 for(var i = 0; i < len; i++){5 if(temp.indexOf(arr[i]) === -1) temp.push(arr[i]);6 } 7 return temp;8 }
实现二
1 function unique( arr ) { 2 var temp = []; 3 var len = arr.length; 4 for (var i = 0; i < len; i++) { 5 var isRepeated = true; 6 for ( var j = 0; j < temp.length; j++){ 7 if ( arr[i] === temp[j] ) break; 8 isRepeated = false; 9 }10 if ( !isRepeated ) temp.push( arr[i] );11 }12 return temp;13 }
2. 思路:设置一个临时数组temp,然后遍历要去重的数组arr,如果arr[i]中的元素在arr中出现的第一次的位置也为i,则将其存入temp,否则跳过此元素,最后返回temp。
1 function unique(arr){2 var temp = [];3 var len = arr.length;4 for (var i = 0; i <len; i++){5 if(arr.indexOf[arr[i] === i) temp.push(arr[i]);6 }7 return temp;8 }
3. 思路:设置一个临时对象tempObj,然后遍历要去重的数组arr, 如果arr[i]中的元素在此对象中有标记,则跳过,否则在临时对象中进行标记,并将其存入临时数组tempArr, 最后返回tempArr。
1 function unique(arr){ 2 var tempObj = {}; 3 var tempArr = []; 4 var len = arr.length; 5 for (var i = 0; i < len; i++) { 6 if ( !tempObj[arr[i]] ){ 7 tempObj[arr[i]] = true; 8 tempArr.push(arr[i]); 9 }10 }11 return tempArr;12 }
4. 思路:对要去重的数组 arr 先进行排序,这样重复的元素就排在了相邻的位置,然后对数组 arr 进行遍历,将arr[i] 与 临时数组 temp 中的最后一个元素进行比较,如果不同则将其存入临时数组,如果相同则跳过此元素,最后返回临时数组。
1 function unique( arr ) { 2 var temp = []; 3 var len = arr.length; 4 arr.sort(); 5 temp.push(arr[0]); 6 for ( var i = 1; i < len; i++ ) { 7 if ( arr[i] !== temp[temp.length-1] ) temp.push(arr[i]); 8 } 9 return temp;10 }
写在最后:其实在真实的项目中,我们没有必要自己去实现这样的函数,利用underscore.js 或者lodash 这样的函数库提供的方法是更好的选择。
web前端面试系列 - 算法( 数组去重 )
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。