前言
提示:题目引用自:https://chinese.freecodecamp.org/(JS中级算法部分)
# 一、题目描述
检查谓词(第二个参数)在集合(第一个参数)的所有元素是否为 truthy。(此处省略N个字,详细题目描述请到网址中看吧)
简而言之:就是判断给定的属性的值,是否合法。
二、测试样例
选几个具有代表性的测试样例
- 测试string类型
truthCheck([{“single”: “yes”}], “single”) 应返回 true。- 测试空字符串 “”
truthCheck([{“single”: “”}, {“single”: “double”}], “single”) 应返回 false。- 测试布尔类型
truthCheck([{“name”: “Pete”, “onBoat”: true}, {“name”: “Repeat”, “onBoat”: true}, {“name”: “FastForward”, “onBoat”: null}], “onBoat”) 应返回 false。- 测试undefined类型
truthCheck([{“user”: “Tinky-Winky”, “sex”: “male”}, {“user”: “Dipsy”}, {“user”: “Laa-Laa”, “sex”: “female”}, {“user”: “Po”, “sex”: “female”}], “sex”) 应返回 false- 测试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");
四、解题思路
本题的重点在于数据类型的判断,其中,NaN类型最为关键。
NaN 属性用于引用特殊的非数字值。NaN 与所有值都不相等,包括它自己。
NaN用typeof显示出的类型为number
判断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
// 通过修整判断正确
总结
多学,多练,多提问。