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
最后还是想吐槽一下面试题里的手写代码题。。。。。如果这是评判能力的标准之一。。。有本事你给我手写一个项目出来啊!!

浙公网安备 33010602011771号