很多面试题都是数组去重,给大家安利一下
第一种方法
<script>
var arr=[1,2,3,4,4,5,6,7,6,5,0]
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]==arr[j]){
arr.splice(j,1);
j--
}
}
}
alert(arr)
</script>
其实个人感觉上面的代码是查找相同就删除
第二种方法
var arr=[1,2,3,4,4,5,6,7,6,5,0];
var json={};
var tmp=[];
for(var i=0;i<arr.length;i++){
json[arr[i]]=arr[i];
}
for(var v in json){
tmp.push(v);
}
console.log(tmp)
其实就是对象的key是不会重复的原理【有点小神奇】
第三种
var arr=[1,2,4,54,56,6,0,1,2,4]
var n = [arr[0]]; //结果数组
for(var i = 1; i < arr.length; i++) //从第二项开始遍历
{
//如果当前数组的第i项在当前数组中第一次出现的位置不是i,
//那么表示第i项是重复的,忽略掉。否则存入结果数组
if (arr.indexOf(arr[i]) == i) n.push(arr[i]);
}
console.log(n)
最后彩蛋内容
近来去面试,面了一个很有趣的试题
var arr=[['$6'],['$12'],['$12']]
转成arr=['$6','$12']
其实有点意思想想接下来的思路,,尤其是把多维数组转成数组让我长见识辣
转数组方法1
var arr=[['$6'],[['$12'],['$12']],['$12'],['$18']]
console.log(arr.toString().split(','))
//["$6", "$12", "$12", "$12", "$18"]
2
console.log(arr.join(',').split(','))
//["$6", "$12", "$12", "$12", "$18"]
这还没去重只是转成一维数组
我写的方法是
var arr=[['$6'],['$12'],['$12']];
var json={};
var tmp=[];
for(var i=0;i<arr.length;i++){
arr[i]=arr[i].toString();
json[arr[i]]=arr[i];
}
for(var v in json){
tmp.push(v);
}
console.log(tmp)