Javascript freeCodeCamp所有内容均为真算法,未定义输出
我在freeCodeCamp的中间算法脚本部分遇到了“一切都是真实”的挑战。此挑战的目标是“检查谓词(第二个参数)在集合的所有元素(第一个参数)上是否真实” 我遇到的问题是,我的代码对某些输入输出“未定义”,但我看不出它这样做的任何原因。我的代码如下Javascript freeCodeCamp所有内容均为真算法,未定义输出,javascript,algorithm,Javascript,Algorithm,我在freeCodeCamp的中间算法脚本部分遇到了“一切都是真实”的挑战。此挑战的目标是“检查谓词(第二个参数)在集合的所有元素(第一个参数)上是否真实” 我遇到的问题是,我的代码对某些输入输出“未定义”,但我看不出它这样做的任何原因。我的代码如下 function truthCheck(collection, pre) { var answer; var filtColl = collection.filter(function(val) { return val.hasOw
function truthCheck(collection, pre) {
var answer;
var filtColl = collection.filter(function(val) {
return val.hasOwnProperty(pre);
});
if (filtColl.length !== collection.length) {
answer = false;
} else {
for (var i = 0; i < filtColl; i++) {
if (filtColl[1][pre] === 0 || filtColl[i][pre] === null || filtColl[i][pre] === "" || filtColl[i][pre] === undefined || filtColl[i][pre] === NaN) {
answer = false;
} else {
answer = true;
}
}
}
return answer;
}
console.log(truthCheck([{"user": "Tinky-Winky", "sex": "male"}, {"user":
"Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user":
"Po", "sex": "female"}], "sex"));
console.log(truthCheck([{"user": "Tinky-Winky", "sex": "male"}, {"user":
"Dipsy"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex":
"female"}], "sex"));
console.log(truthCheck([{"user": "Tinky-Winky", "sex": "male", "age": 0},
{"user": "Dipsey", "sex": "male", "age": 3}, {"user": "Laa-Laa", "sex":
"female", "age": 5}, {"user": "Po", "sex": "female", "age": 4 }], "age"));
console.log(truthCheck([{"name": "Pete", "onBoat": true}, {"name": "Repeat",
"onBoat": true}, {"name": "FastForward", "onBoat": null}], "onBoat"));
功能真实性检查(采集、预处理){
var回答;
var filtColl=collection.filter(函数(val)){
返回val.hasOwnProperty(pre);
});
if(filtColl.length!==collection.length){
答案=错误;
}否则{
对于(变量i=0;i
第二个console.log正确地输出为“false”,但其他三个输出为“undefined”。我一辈子都不明白为什么我的代码不起作用。有什么想法吗
function truthCheck(col, pre) {
return col.every(function(val) {
return val[pre];
});
}
这是一种非常简单的方法:)它基本上根据每个对象是否包含与第二个参数匹配的属性来返回true或false
您甚至可以将其缩短为:)
首先,我将解释为什么您的代码不起作用,(我对错误的地方进行了注释) 以下是我是如何完成这项挑战的:
function truthCheck(collection, pre) {
// Is everyone being true?
let newCollection = collection.filter((obj) => {
if(Boolean(obj[pre])){
return obj;
}
});
if(collection.length === newCollection.length){
return true;
}
return false;
}
Boolean(0)、Boolean(null)、Boolean(“”)、Boolean(未定义)、Boolean(NaN)
都是false
这是完成此挑战的简单方法:
function truthCheck(collection, pre) {
// Is everyone being true?
return collection.every(obj => obj[pre]);
}
谢谢:)。
功能真实性检查(采集、预处理){
返回集合。每个(obj=>检查(obj,pre));
}
函数检查(对象、属性){
if(object.hasOwnProperty(property)和&object[property])返回true;
否则返回false;
}
控制台日志(truthCheck([{
“用户”:“Tinky Winky”,
“性别”:“男性”
},
{
“用户”:“Dipsy”,
“性别”:“男性”
},
{
“用户”:“拉拉”,
“性”:“女性”
},
{
“用户”:“采购订单”,
“性”:“女性”
}
],
"性别);;
//应该返回true。
控制台日志(truthCheck([{
“用户”:“Tinky Winky”,
“性别”:“男性”
},
{
“用户”:“Dipsy”
},
{
“用户”:“拉拉”,
“性”:“女性”
},
{
“用户”:“采购订单”,
“性”:“女性”
}
],
"性别);;
//应返回false。
欢迎使用StackOverflow!请为您的答案提供更多上下文:。谢谢!
function truthCheck(collection, pre) {
var answer;
var filtColl = collection.filter(function(val) {
return val.hasOwnProperty(pre);
});
if (filtColl.length !== collection.length) {
answer = false;
}
else {
for (var i = 0; i < filtColl.length; i++) {
if (filtColl[i][pre] === 0 || filtColl[i][pre] === null || filtColl[i][pre] === "" || filtColl[i][pre] === undefined || filtColl[i][pre].toString() === "NaN") {
answer = false;
break;
} else {
answer = true;
}
}
}
return answer;
}
function truthCheck(collection, pre) {
// Is everyone being true?
let newCollection = collection.filter((obj) => {
if(Boolean(obj[pre])){
return obj;
}
});
if(collection.length === newCollection.length){
return true;
}
return false;
}
function truthCheck(collection, pre) {
// Is everyone being true?
return collection.every(obj => obj[pre]);
}
function truthCheck(collection, pre) {
return collection.every(obj=>Boolean(obj[pre]));
}