Может ли объявление / инициализация переменной JavaScript использовать логический тип условия? - PullRequest
0 голосов
/ 20 февраля 2019

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.Описание упражнения и полное решение следующие:

Учитывая последовательность целых чисел в виде массива, определите, возможно ли получить строго возрастающую последовательность, удалив не более одного элемента из массива.

Примечание: последовательность a0, a1, ..., an считается строго возрастающей, если a0

Пример

Для 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;
}

1 Ответ

0 голосов
/ 20 февраля 2019

Да и им фактически присваиваются логические значения.

Например, для переменной 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)

Надеюсь, это поможет.

...