所以我有一点困惑,我正在解决一个在freeCodeCamp上的挑战。
这个挑战的要求如下:
所有都为真
检查集合(第一个参数)中的所有元素是否都满足断言函数(第二个参数)的真值检测。
我的代码已经解决了,但我不明白为什么还要多走一步。我的代码如下:
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
函数?我错过了什么吗?
if (Boolean(element[key]))
写成if (element[key])
更为简便。这段代码检查特定值是否被设置为某些可运算的真值。如果您想知道一个对象是否拥有特定的 key(而不是特定的 value),请使用if (element.hasOwnProperty(key))
。 - Tomalak