JS学习笔记:一切都是True

前言

提示:题目引用自:https://chinese.freecodecamp.org/(JS中级算法部分)


# 一、题目描述

检查谓词(第二个参数)在集合(第一个参数)的所有元素是否为 truthy。(此处省略N个字,详细题目描述请到网址中看吧)
简而言之:就是判断给定的属性的值,是否合法。

二、测试样例

选几个具有代表性的测试样例

  1. 测试string类型
    truthCheck([{“single”: “yes”}], “single”) 应返回 true。
  2. 测试空字符串 “”
    truthCheck([{“single”: “”}, {“single”: “double”}], “single”) 应返回 false。
  3. 测试布尔类型
    truthCheck([{“name”: “Pete”, “onBoat”: true}, {“name”: “Repeat”, “onBoat”: true}, {“name”: “FastForward”, “onBoat”: null}], “onBoat”) 应返回 false。
  4. 测试undefined类型
    truthCheck([{“user”: “Tinky-Winky”, “sex”: “male”}, {“user”: “Dipsy”}, {“user”: “Laa-Laa”, “sex”: “female”}, {“user”: “Po”, “sex”: “female”}], “sex”) 应返回 false
  5. 测试NaN类型
    truthCheck([{“single”: “double”}, {“single”: NaN}], “single”) 应返回 false。

三、通过代码

function truthCheck(collection, pre) {

  let sum = 0;
  for(let i=0;i<collection.length;i++){
      if(collection[i][pre]==undefined || collection[i][pre]=="" || Number.isNaN(collection[i][pre]) != false)//将不合法的数据排除掉,特别注意NaN类型
            continue;
      sum++;
  }

  if(sum!=collection.length)//将合法数据数量与总数量做对比
      return false;      
  return true;
}

truthCheck([{"single": ""}, {"single": "double"}], "single");

四、解题思路

  1. 本题的重点在于数据类型的判断,其中,NaN类型最为关键。

  2. NaN 属性用于引用特殊的非数字值。NaN 与所有值都不相等,包括它自己。

  3. NaN用typeof显示出的类型为number

  4. 判断NaN用Number.isNaN(数据)来判断,

提示:判断类型匹配这里有一个坑

var a = "a";
console.log(isNaN(a)); // true
// 字母a是 string类型,通过isNaN()判断错误


function test(n){
  if(typeof(n) === "number" && isNaN(n))   
      return true;    //双重判断
  return false;
}
console.log(test(a)); // false
// 通过修整判断正确

总结

多学,多练,多提问。

你可能感兴趣的:(JavaScript)