В полученном массиве чисел, вернуть сумму всех положительных чисел. JavaSript

Задание:

Вы получаете массив чисел, возвращаете сумму всех положительных чисел.

Пример [1,-4,7,12] => 1 + 7 + 12 = 20

Примечание: если суммировать нечего, сумма по умолчанию равна 0.

Мое решение:

function positiveSum(arr) {
  return arr.filter(i => i > 0).map(i => x+=i, x=0).reverse()[0]
}

Почему-то он выдает мне ошибку, не могу понять. Хотя должен вернуть цифру.

Test Results: Basic tests Testing for fixed tests expected undefined to equal 0 Completed in 2ms Completed in 2ms


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

Автор решения: HTO HOT

Советую вам прочитать про reduce. Не такой уж и сложный метод в массиве. https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

Вот решение:

const arr =  [1,-4,7,12]
function positiveSum(arr) {
  return arr.filter(i => i > 0).reduce((a,b)=>a+b,0)
}
→ Ссылка
Автор решения: EzioMercer

Не очень понимаю зачем несколько раз по массиву надо проходиться и зачем писать код, который сам же потом не можешь модифицировать

Если уж однострочными методами вам сложно, то вам надо начать с самый простых и очевидных реализаций, например через самый обычный цикл for:

const sumOfPositives = (arr = []) => {
  let sum = 0;
  
  for (let i = 0; i < arr.length; ++i) {    
    if (arr[i] > 0) sum += arr[i];
  }
  
  return sum;
}

console.log(sumOfPositives([1, -1, 2, -2, 3, -3]));
console.log(sumOfPositives([-1, -2, -3]));
console.log(sumOfPositives([]));
console.log(sumOfPositives());

Потом можно переписать с помощью for..of:

const sumOfPositives = (arr = []) => {
  let sum = 0;
  
  for (const num of arr) {
    if (num > 0) sum += num;
  }
  
  return sum;
}

console.log(sumOfPositives([1, -1, 2, -2, 3, -3]));
console.log(sumOfPositives([-1, -2, -3]));
console.log(sumOfPositives([]));
console.log(sumOfPositives());

А потом уже можно писать однострочные ответы, например так:

const sumOfPositives = (arr = []) => arr.reduce((sum, num) => num > 0 ? sum += num : sum, 0);

console.log(sumOfPositives([1, -1, 2, -2, 3, -3]));
console.log(sumOfPositives([-1, -2, -3]));
console.log(sumOfPositives([]));
console.log(sumOfPositives());

→ Ссылка