[英]Can a JavaScript variable declaration/initialization use a boolean type conditional?
JavaScript新手在這里。 我在練習的解決方案中遇到了以下代碼。 我不確定它在做什么:
var noStepBack = sequence[i-1] && sequence[i-1] >= sequence[i+1];
var noStepFoward = sequence[i+2] && sequence[i] >= sequence[i+2];
似乎是在聲明變量並對其進行初始化,但是賦值運算符右邊的代碼是一個條件語句。 如果條件語句解析為false,是否僅將其分配為“ 0”,如果條件解析為true,則將其分配為“ 1”?
更多的上下文,這是針對CodeSignal網站上幾乎增加序列的練習。 練習說明和完整解決方案如下:
給定一系列整數作為數組,請確定是否有可能通過從數組中刪除不超過一個元素來獲得嚴格遞增的序列。
注意:如果a0 <a1 <... <an,則序列a0,a1,...,an被認為是嚴格增加的。 僅包含一個元素的序列也被認為是嚴格增加的。
例
對於序列= [1、3、2、1],輸出應幾乎為IncreasingSequence(sequence)= false。
為了獲得嚴格遞增的順序,此數組中沒有一個元素可以刪除。
對於序列= [1、3、2],輸出應幾乎為IncreasingSequence(sequence)= true。
您可以從數組中刪除3以獲得嚴格遞增的序列[1、2]。 或者,您可以刪除2以得到嚴格遞增的序列[1、3]。
function almostIncreasingSequence(sequence) {
if(sequence.length == 2) return true;
var error = 0;
for(var i = 0; i < sequence.length - 1; i++){
// if current value is greater than next value
if(sequence[i] >= sequence[i+1]){
// Test whether stepping back or forwards can bridge the hump or pothole
var noStepBack = sequence[i-1] && sequence[i-1] >= sequence[i+1];
var noStepFoward = sequence[i+2] && sequence[i] >= sequence[i+2];
// We only test for bridge gaps when i > 0
if(i > 0 && noStepBack && noStepFoward) {
// Cannot step back over gap forwards or backwards
// Counts as two errors ONLY WHEN BOTH PRESENT
error+=2;
}else{
// Typical error
error++;
}
}
// Early dropout cause if you ever get more than one error, then its game over anyway
if(error > 1) return false;
}
return true;
}
是的 ,他們實際上獲得了分配的布爾值。
例如,對於noStepBack
變量,它將被計算為該條件的布爾結果: sequence[i-1] && sequence[i-1] >= sequence[i+1];
如果為true,則noStepBack = true
,否則為noStepBack = false
。
請注意, true
和false
是Javascript的原始布爾值。
例如,如果存在noStepBack = true
和noStepFoward = false
該聲明
(i > 0 && noStepBack && noStepFoward)
將等同於:
(i > 0 && true && false)
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.