最近看各种面试题,其中去重是非常普遍的。我就写出其中一道题来记录一下去重的思路
创建一个数组,类似于 ['2','3','1'] ,内容是100位整数字符串,然后去重
let arr = [];
for(let i = 0;i<100;i++){
let val = parseInt(Math.random()*10) + '';
arr.push(val);
}
let obj = {},arr1=[];
for(let i = 0,len = arr.length;i<len;i++){
if(obj[arr[i]]){
obj[arr[i]].count++;
}else {
obj[arr[i]] = {'count':1,'val':arr[i]}
}
}
for(item in obj){
arr1.push(item)
}
console.log(arr1); // 这就是去重后的结果
上面这个引入 obj 这个参数的解法有一个好处就是,我可以算出 arr 数组中重复的元素有多少,已经其他你想知道的东西,缺点就是稍微麻烦一点。
这道题还有一个解法是
let i = arr.length-1,site;
while (i > 0){
site = arr.lastIndexOf(arr[i],i-1);
if(site > -1){
arr.splice(site,1);
}
i--;
}
console.log(arr); // 这就是去重后的结果
我封装了一个增量的去重,也可以尝试一下
function distinct( arr){
// 这是一个去重
if(arr instanceof array){
let i = 0, len ;
while (i< arr.length-1){
len = arr.indexOf(arr[i],i+1);
if(len > 0){
arr.splice(len,1)
}else {
i++
}
}
return arr
}else {
console.log('传入的对象不是数组,改函数暂不支持')
}
}
网友评论