JavaScript变量声明/初始化可以使用条件式布尔类型吗?

时间:2019-02-20 18:47:31

标签: javascript variables boolean-search

此处是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;
}

1 个答案:

答案 0 :(得分:0)

,并且实际上为它们分配了布尔值。

例如,对于noStepBack变量,它将被计算为以下条件的布尔结果: sequence[i-1] && sequence[i-1] >= sequence[i+1];

如果是这样,则noStepBack = truenoStepBack = false否则。

请注意,truefalse是Javascript的原始布尔值。

例如,如果我们遇到noStepBack = truenoStepFoward = false

声明

(i > 0 && noStepBack && noStepFoward)

将等同于:

(i > 0 && true && false)

希望这会有所帮助。