这又是一道面试题,要求只能用两个循环。我用了两种方法,第一种就是循环去重,消耗了两个循环,最后排序直接用js自带的。第二种是用new Set去重,再用原生排序消耗两个循环。
题目:对数组进行去重并从大到小递归。如 arr=[5,5,8,6,9,9,2,3,8,2,5,NaN,4,NaN];
输出如下:
var arr=[5,5,8,6,9,9,2,3,8,2,5,NaN,4,NaN];
var oarr=[];
var flag=true;
for(var i=0;i<arr.length;i++){
if(oarr.indexOf(arr[i])==-1){
if(arr[i]!=arr[i]&&flag){//判断NaN,并只把第一个NaN放入数组
oarr.push(arr[i]);
flag=false;
}
if(arr[i]==arr[i]){//不是NaN的情况
oarr.push(arr[i]);
}
}
}
oarr.sort(function(a,b){//倒序排序
return b-a;
});
console.log(oarr);
还有一种用Array.from(new Set(arr))的方法,在Set里一样可以把NaN去重的,面试官坑我,