शायद आप सुनना चाहते हैं कि लूप के साथ क्या गलत हुआ:
for (i = 0; i < arguments.length; i++){
logicalAnd = arguments[i] && arguments[i+1];
}
- यह लूप
&&पिछले दो आइटमों को संग्रहीत करता है जो इसका सामना करता है। आदर्श मामले में यह &&सरणी के अंतिम दो तत्वों को मिलाएगा (जो पहले से ही आपकी जरूरत नहीं है)
- लूप के अंत में उसके शीर्ष पर
i=arguments.length-1, यह सरणी के अंतिम तत्व की जांच करेगा, और i+1"अंतिम", जो है के बाद "तत्व" है undefined। तार्किक संबंधों के संदर्भ में, यह माना जाता है false, लेकिन &&ऐसे मामले में स्वयं मूल्य पैदा करता है, और यही कारण है कि फ़ंक्शन undefinedहर समय लौटता है (इसका उल्लेख इस प्रश्न में किया जा सकता है)।
डॉक्स
expr1 && expr2: यदि रिटर्न में expr1परिवर्तित किया जा सकता trueहै expr2; और, रिटर्न expr1।
arr=[true];
console.log("your case:",arr[0] && arr[1]);
console.log("1 && 2:", 1 && 2);
इसके बजाय, आपको
logicalAndएक संचायक के रूप में उपयोग करना चाहिए , जो
&&सभी पिछले तत्वों के परिणाम को इकट्ठा करता है , और एक चाल जो आप उपयोग कर सकते हैं यदि आंशिक
&&का परिणाम है
false, तो इससे कोई फर्क नहीं पड़ता कि शेष तत्व क्या हैं, अंतिम परिणाम होने जा रहा है
false, तो लूप तुरंत बंद हो सकता है:
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));
और फिर आप इसे आर्ची के उत्तर के लिए अनुकूलित कर सकते हैं : &&-ing आइटम का परिणाम है trueयदि सभी आइटम हैं true, और आपको &&परिणाम की गणना के लिए एक भी ऑपरेशन निष्पादित करने की आवश्यकता नहीं है :
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));
(ऊपर के स्निपेट में मैंने falseखाली तर्क सूची के लिए उत्पादन करने का लक्ष्य रखा है।)