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;
}