牛客 为 Array 对象添加一个去除重复项的方法

关键是indexOf的用法:

indexOf是判断resArr数组中的值和当前的值有没有相同的,如果有相等的会返回那个位置,没有相同的返回-1,这里返回-1的意思是没有相同的,也就是resArr数组里还没有当前的数。再之后再遇到有相同的就不会返回-1了,也就不会继续执行if里面的了。
   Array.prototype.uniq = function () {
  1.    var resArr = [];

  2.    var flag = true;

  3.      

  4.    for(var i=0;i<this.length;i++){

  5.        if(resArr.indexOf(this[i]) == -1){

  6.            if(this[i] != this[i]){   //排除 NaN

  7.               if(flag){

  8.                    resArr.push(this[i]);

  9.                    flag = false;

  10.               }

  11.            }else{

  12.                 resArr.push(this[i]);

  13.            }

  14.        }

  15.    }

  16.     return resArr;

  17. }

NaN 即 Not a Number , 不是一个数字,JS中number数据类型中除了浮点型和整数型还有一个特殊的值 NaN。

NaN, 它是用来表示是否属于number类型的一种状态: 是或否。而不是一个确切的值

当一个表达式返回了NaN 时,表示该表达式中存在不可以转化的变量,并返回了无效的结果,并不是返回了一个确切的值

如果非要说NaN是一个值得话,那么 NaN 就是除过数字的任意值,但绝不是确切的某一个值.

所以 NaN != NaN , 因为它是一个范围,而不能代表一个确定的值

猜你喜欢

转载自blog.csdn.net/gloria_chenjing/article/details/81110032