Js去除数组里重复元素
今天面试,其中一道面试题:去除数组里重复的元素。(说实话,遇到这种手写代码的真的很无语。。。axb)
不晓得我又没有答对,所以回来试试。
不敲不知道,一敲吓一跳。。。。 回想自己写的。。。简直是tuoshi。。。。
算了算了 生活还是要继续。
敲黑板,切入正题......
方法一:
将数组逐渐搬到另一个数组中,当遇到元素重复时,不移动;不重复,则移到新数组中。
<script> /*将数组逐渐搬到另一个数组中,当遇到元素重复时,不移动,不重复,则移到新数组中*/ var a = [1,2,1,2,33,3,3,3,1,1,33,3]; function filterArr(arr) { var result = []; for (var i=1; i<arr.length; i++){ //设置一个标志:是否移动,设置在这里的目的之一是为了将最后一个元素一定添加到新数组中。 var flag = true for (var j=i; j<arr.length-1; j++){ if (arr[i] == arr[j+1]){ console.log(arr[i]) //如果第i元素个后面有与arr[i]相同的元素 则将flag设置为false,不移动 flag = false break; //并跳出循环 } } if(flag){ result.push(arr[i]) } } return result; } var res = filterArr(a) console.log(res) </script>
方法二:
遍历数组arr,把元素分别放入另一个数组result中,判断arr中的元素在result中是否存在,不存在即加入result中。
<script> /*遍历数组arr,把元素分别放入另一个数组result中,判断arr中的元素在result中是否存在,不存在即加入result中*/ var a = [1,2,1,2,33,3,3,3,1,1,33,3]; function filterArr(arr) { var result = []; for(var i=0;i<arr.length;i++){ if(result.indexOf(arr[i])==-1){ //arr[i]不存在于result中时,返回-1 result.push(arr[i]) } } return result; } var res = filterArr(a) console.log(res) </script>
方法三:
将数组的值作为对象的属性,通过对象的属性值来判断数组是否重复,若该项不重复则给对象对应属性值赋为true,便于之后的判断,并将数据项加入结果集中。
<script> /*将数组的值作为对象的属性,通过对象的属性值来判断数组是否重复, 若该项不重复则给对象对应属性值赋为true,便于之后的判断,并将数据项加入结果集中*/ var a = [1,2,1,2,0,3]; function filterArr(arr) { var result = []; var obj = {} for(var i=0;i<arr.length;i++){ //这里通过方括号给对象动态地添加属性 if (!obj[arr[i]]){ result.push(arr[i]) obj[arr[i]] = true } } return result; } var res = filterArr(a) console.log(res) </script>
方法四:
将数组的值赋给另一个数组的键,此时重复的元素都被删除,然后取新数组的键作为去重后的结果。
/*将数组的值赋给另一个数组的键,此时重复的元素都被删除,然后取新数组的键作为去重后的结果*/ var a = [1,2,1,2,0,3]; function filterArr(arr) { var result = [] var temp = [] for(var i in arr){ //将原数组的值作为键传给temp数组,键不能重复,自动去重 temp[arr[i]] = 1; } //将temp数组的键作为值push给result for(var i in temp){ result.push(i) } return result } var res = filterArr(a) console.log(res)
参考:http://www.cnblogs.com/lhyhappy65/p/5912460.html
最后还是想吐槽一下面试题里的手写代码题。。。。。如果这是评判能力的标准之一。。。有本事你给我手写一个项目出来啊!!