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]))