17-数组中去除基本数据类型和NaN的重复项(并保证原有数组顺序)

思想:

1.只有NaN不等于自身,通过这个特性去区分处理

2.通过一个变量开关,去控制添加次数(在循环中通过if条件)

3.找到第一次第一次就命中条件的,通过开关的作用把第一次的命中的元素push到数组中,后面的NaN重复的自然也就添加不进去

3.其他元素添加与否的条件通过判断数组中是否已经存在,通过indexOf,如果为-1就是不存在则添加。

var arr = [false,true,undefined,null,null,NaN,0,1,{},{},'a','a',NaN];
// 期望输出结果:
// [false,true,undefined,null,NaN,0,1,{},{},'a'];

function fn(arr){
  let flag = true;  //控制相同元素添加次数的开关
  let newArr = [];
  arr.forEach((item,index)=>{
    // item != item 是为了筛出来NaN,因为不等于自身的只有NaN
    // NaN === NaN 是false,其他的都为true
    if(item!=item){
      if(flag){
        newArr.push(item)   //通过开关,把最先出现的那个NaN添加进了数组中,保证了新数组的顺序
        flag=false;  //添加一次成功后,开关关闭
      }
    }else{
      // 新数组中不存在的才会push到新数组中
      if(newArr.indexOf(item)===-1){
        newArr.push(item)
      }
    }
  })
  return newArr;

}
var res = fn(arr);
console.log(res);

 

posted @ 2021-06-23 15:25  猎奇游渔  阅读(79)  评论(0编辑  收藏  举报