inline if и тернарный оператор работает не как if. Почему так происходит

Нужно написать алгоритм, который подсчитывает кол-во подряд идущих единиц. Написал 3 наброска и столкнулся с тем что inline if && тернарный оператор работают иначе чем стандартный if в этом случае, может уже глаз замылился и я чего то элементарного не вижу =D, обычно всегда использую либо тернарный либо inline if и все работало...

убрал проверку

{
            if(counter > result){
                result = counter;
            }
            counter = 0;
        } 

из else блока, чтобы просто было понятней, алгоритм я доработаю, мне просто интересно почему так синтаксис работает.

 const vector1 = (array) => {
    let counter = 0  // счетчик, его задача считать сколько подряд единиц идут друг за другом.
    let result = null // когда вместо 1 попадается 0 то счетчик обнуляется и значение сохраняется в result
    for (let i = 0; i < array.length; i++) {
        if (array[i] === 1) counter++; // если элемент в массиве равен 1, увеличить счетчик
        else result = counter; counter = 0; // если элемент в массиве не равен 1, то записать значение счетчика в result и обнулить счетчик
    }
    return result
}
debugger
console.log(vector1([0,1,1,1,1,0,1])) //выдаст 0, почему то проваливается в else ветку // не верно



const vector2 = (array) => {
    let counter = 0
    let result= null
    for (let i = 0; i < array.length; i++) {
        if (array[i] === 1) {
            counter++
        } else{
            result = counter; counter = 0
        }
    }
    return result
}
console.log(vector2([0,1,1,1,1,0,1]))// работает верно(с данным массивом)


const vector3 = (array) => {
    let counter = 0 
    let result= null 
    for (let i = 0; i < array.length; i++) {
        array[i] === 1 ? counter++ : result = counter; counter = 0
    }
    return result
}
console.log(vector3([0,1,1,1,1,0,1])) // тоже самое что и с 1 вариантом

Спасибо.


Ответы (1 шт):

Автор решения: esergey

Глаз у вас замылился. counter не попадает под else без кавычек. counter = 0 выполняется всегда.

const vector1 = (array) => {
    let counter = 0  // счетчик, его задача считать сколько подряд единиц идут друг за другом.
    let result = null // когда вместо 1 попадается 0 то счетчик обнуляется и значение сохраняется в result
    for (let i = 0; i < array.length; i++) {
        if (array[i] === 1) counter++; // если элемент в массиве равен 1, увеличить счетчик
        else result = counter; 
        counter = 0; // если элемент в массиве не равен 1, то записать значение счетчика в result и обнулить счетчик
    }
    return result
}
debugger
console.log(vector1([0,1,1,1,1,0,1])) //выдаст 0, почему то проваливается в else ветку // не верно



const vector2 = (array) => {
    let counter = 0
    let result= null
    for (let i = 0; i < array.length; i++) {
        if (array[i] === 1) {
            counter++
        } else{
            result = counter; 
            counter = 0
        }
    }
    return result
}
console.log(vector2([0,1,1,1,1,0,1]))// работает верно(с данным массивом)


const vector3 = (array) => {
    let counter = 0 
    let result= null 
    for (let i = 0; i < array.length; i++) {
        array[i] === 1 ? counter++ : result = counter; 
        counter = 0
    }
    return result
}
console.log(vector3([0,1,1,1,1,0,1])) 
→ Ссылка