私はちょっと混乱しています。私はfreeCodeCampに挑戦しています。forEach/for ...値を返さないのですか?
述語(第二引数)は、コレクション(最初の引数)のすべての要素にtruthyであればすべてが
チェックトゥルーを次のように
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
機能から復帰するとわかります...しかし、それは結局真実を返すでしょう。
私は、変数を定義してその値をfalseに設定し、最後に変数を返すことでこれを回避することができました。より良い方法がありますか?これらのリターンがtruthCheck
関数から抜け出すようですか?何か不足していますか?
Foreachは戻り値で何もしません。あなたは代わりに通常のforループを使いたいでしょう。 – Christopher
FYI: 'if(Boolean(element [key]))'は 'if(element [key])'と書くのが簡単です。これは、特定の値がtrueと評価されるものに設定されているかどうかをチェックします。あるオブジェクトが特定の* key *を持っているかどうかを知りたければ、(if *(element.hasOwnProperty(key)) 'を使います。 – Tomalak