1

JavaScript 新手在这里。我在练习的解决方案中遇到了以下代码。我不确定它在做什么:

var noStepBack = sequence[i-1] && sequence[i-1] >= sequence[i+1];
var noStepFoward = sequence[i+2] && sequence[i] >= sequence[i+2];

看起来它是在声明变量并初始化它们,但是赋值运算符右边的代码是一个条件语句。如果条件语句解析为假,这是否只是分配“0”,如果它们解析为真,则分配“1”?

更多的上下文,这是来自 CodeSignal 网站的练习 aboutIncreasingSequence。练习说明及完整解法如下:

给定一个整数序列作为数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。

注意:如果 a0 < a1 < ... < an,则序列 a0, a1, ..., an 被认为是严格递增的。仅包含一个元素的序列也被认为是严格递增的。

例子

对于 sequence = [1, 3, 2, 1],输出应该是几乎IncreasingSequence(sequence) = false。

这个数组中没有一个元素可以被删除以获得严格递增的序列。

对于 sequence = [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;
}
4

1 回答 1

0

的,它们实际上被分配了布尔值。

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

如果这是真的,noStepBack = true否则noStepBack = false

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

例如,如果我们有一种情况,noStepBack = true并且noStepFoward = false

该声明

(i > 0 && noStepBack && noStepFoward)

将相当于:

(i > 0 && true && false)

希望这可以帮助。

于 2019-02-20T19:10:28.820 回答