-3

Задание:

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

Пример [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 Answers2

2

Советую вам прочитать про 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)
}
HTO HOT
  • 1,333
-1

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

Если уж однострочными методами вам сложно, то вам надо начать с самый простых и очевидных реализаций, например через самый обычный цикл 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());

EzioMercer
  • 6,178
  • 2
  • 9
  • 28