此处是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 示例 对于序列= [1、3、2、1],输出应为
此数组中没有任何一个元素可以删除以得到严格递增的序列。 对于序列= [1、3、2],输出应为
几乎为增量的序列(序列)= 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;
}
答案 0 :(得分:0)
是,并且实际上为它们分配了布尔值。
例如,对于noStepBack
变量,它将被计算为以下条件的布尔结果:
sequence[i-1] && sequence[i-1] >= sequence[i+1];
如果是这样,则noStepBack = true
和noStepBack = false
否则。
请注意,true
和false
是Javascript的原始布尔值。
例如,如果我们遇到noStepBack = true
和noStepFoward = false
声明
(i > 0 && noStepBack && noStepFoward)
将等同于:
(i > 0 && true && false)
希望这会有所帮助。