@volerass

Как просуммировать элементы массива, расположенные до нуля?

Как посчитать сумму элементов массива, которые идут до первого нуля?
Вот моя попытка:

let b = [1, 2, 3, 0, 4, 5, 6];

for (let i = 0; i <= b.length; i++) {
  if (i < 0) {
    break
  }
  console.log( i += i );
}
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 4
0xD34F
@0xD34F Куратор тега JavaScript
arr.reduceRight((acc, n) => n && acc + n, 0)
Ответ написан
Seasle
@Seasle Куратор тега JavaScript
\( ゚ヮ゚)/
let numbers = [1, 2, 3, 0, 4, 5, 6];
let sum = 0;
for (let i = 0; i < numbers.length; i++) {
  if (numbers[i] > 0) {
    sum += numbers[i];
  } else {
    break;
  }
}
console.log(sum);

Первая ошибка - куда будете сохранять результат суммы? В индекс массива не пойдет.
Вторая ошибка - <=. Как только проитерируется весь массив - цикл не будет завершен, а при попытке достать элемент (а мы уже всё проитерировали) Вы рискуете получить NaN.
Третья ошибка - условие i < 0. Тут сразу две ошибки: не i а b[i]; и не <, а ===. Если оставить меньше нуля, то даже при достижении элемента равному нулю цикл не будет остановлен.
Ответ написан
@V0vash
НАшКОДИЛ
let b = [1, 2, 3, 0, 4, 5, 6];


const sum = b.slice(0, b.findIndex(e => e === 0)).reduce((total, amount) => total + amount); 

console.log(sum)
Ответ написан
@StiflerProger
i += i делать не нужно. У тебя выполняется увеличение i в конце каждой итерации цикла
for (let i = 0; i <= b.length; i++) вот тут

Второй параметр цикла у тебя не правильный.
В твоём примере длина массива равна 7. Начинаешь цикл ты объявляя let i = 0 и будешь ты выполнять его пока i <= b.length b.length в твоём случае равен 7.
Т.е. цикл будет выполняться и каждый раз будет увеличиваться i на +1.
i у тебя будет сначала 0, потом 1,2,3,4,5,6,7. i не станет 8 т.к. не выполнится условие i <= b.length
Соответственно из того что я написал выше, цикл у тебя выполнится 8 раз (от 0 до 7). А длина массива у тебя всего 7. Значит ты на 1 раз выполнишь цикл больше. Надо поменять на i < b.length

Для того чтобы посчитать сумму значений до 0, создай ещё одну переменную перед циклом. И добавляй значение пока не будет условие if (<текущее значение> === 0) {
т.е. вместо console.log( i += i ); тебе нужно будет добавлять текущее значение
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы