【发布时间】:2017-04-22 15:51:51
【问题描述】:
所以我有点困惑,我正在解决freeCodeCamp 上的一个挑战。
challenge 内容如下
一切都是真实的
检查谓词(第二个参数)在集合的所有元素(第一个参数)上是否为真。
解决了,但我不明白为什么我必须采取额外的步骤。我的代码是这样的:
function truthCheck(collection, pre) {
collection.forEach(function(element) {
for (key in element) {
if (!element.hasOwnProperty(pre)) {
return false;
} else if (key === pre) {
if (!Boolean(element[key])) {
return false;
}
}
}
});
return true;
}
truthCheck([
{"user": "Tinky-Winky", "sex": "male"},
{"user": "Dipsy"},
{"user": "Laa-Laa", "sex": "female"},
{"user": "Po", "sex": "female"}
], "sex");
所以在这种情况下它应该会失败,因为collection 中的第二个元素没有sex 属性。如果pre 参数,或者在这种情况下sex 不是一个真实值,您也会收到失败。
当这些被击中时(它们是什么,我可以通过控制台日志来判断)但我认为它会跳出循环并从 truthCheck 函数返回.....但它没有,它最终会返回true。
我可以通过定义一个变量然后将该值设置为 false 然后在最后返回该变量来规避这个问题。有没有更好的办法?似乎这些回报应该突破truthCheck 函数?我错过了什么吗?
【问题讨论】:
-
Foreach 不处理返回值。您可能希望使用常规的 for 循环。
-
仅供参考:
if (Boolean(element[key]))更容易写成if (element[key])。这将检查某个值是否设置为评估为 true 的值。如果你想知道一个对象是否有某个key(而不是有某个value),使用if (element.hasOwnProperty(key))。
标签: javascript