Mungkin Anda ingin mendengar apa yang salah dengan loop:
for (i = 0; i < arguments.length; i++){
logicalAnd = arguments[i] && arguments[i+1];
}
- loop ini menyimpan
&&dua item terakhir yang dihadapinya. Dalam kasus ideal ini akan &&menyatukan dua elemen terakhir dari array (yang sudah bukan yang Anda butuhkan)
- di atas itu pada akhir loop
i=arguments.length-1, itu akan memeriksa elemen terakhir dari array, dan i+1merupakan elemen "setelah" yang terakhir, yaitu undefined. Dalam hal hubungan logis, itu dianggap false, tetapi &&menghasilkan nilai itu sendiri dalam kasus seperti itu, dan itulah sebabnya fungsi kembali undefinedsepanjang waktu (ini bisa saja disebutkan dalam pertanyaan).
Documents
expr1 && expr2: Jika expr1dapat dikonversi menjadi true, mengembalikan expr2; lain, kembali expr1.
arr=[true];
console.log("your case:",arr[0] && arr[1]);
console.log("1 && 2:", 1 && 2);
Sebaliknya, Anda harus menggunakan
logicalAndsebagai akumulator, yang mengumpulkan hasil dari
&&-semua elemen sebelumnya, dan trik yang dapat Anda gunakan adalah jika hasil dari sebagian
&&adalah
false, tidak masalah apa elemen yang tersisa, hasil akhirnya akan jadi
false, sehingga loop dapat segera berhenti:
function andMultipleExpr(){
let logicalAnd = arguments[0] || false;
for (let i = 1; i < arguments.length && logicalAnd; i++){
logicalAnd = logicalAnd && arguments[i];
}
return logicalAnd;
}
console.log("():",andMultipleExpr());
console.log("(false):",andMultipleExpr(false));
console.log("(true):",andMultipleExpr(true));
console.log("(true,true):",andMultipleExpr(true,true));
console.log("(true, true, false, false):",andMultipleExpr(true, true, false, false));
dan kemudian Anda dapat mengoptimalkannya terhadap jawaban Archie : hasil dari &&item -ing adalah truejika semua item true, dan Anda tidak harus menjalankan &&operasi tunggal untuk menghitung hasilnya:
function andMultipleExpr(){
if(arguments.length===0){
return false;
}
for (let i = 0; i < arguments.length; i++){
if(!arguments[i]){
return false;
}
}
return true;
}
console.log("():",andMultipleExpr());
console.log("(false):",andMultipleExpr(false));
console.log("(true):",andMultipleExpr(true));
console.log("(true,true):",andMultipleExpr(true,true));
console.log("(true, true, false, false):",andMultipleExpr(true, true, false, false));
(Dalam cuplikan di atas saya bertujuan untuk menghasilkan falsedaftar argumen kosong.)