@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 );
}
  • Вопрос задан
  • 1000 просмотров
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
const sum = arr.reduceRight((acc, n) => n && acc + n, 0);

или

let sum = 0;
for (let i = 0; arr[i]; sum += arr[i++]) ;

или

let sum = 0;
for (const n of arr) {
  if (!n) {
    break;
  }
  sum += n;
}

или

const sum = (function sum(arr, i = 0) {
  return arr[i] ? arr[i] + sum(arr, i + 1) : 0;
})(arr);
Ответ написан
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)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@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 ); тебе нужно будет добавлять текущее значение
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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