В полученном массиве чисел, вернуть сумму всех положительных чисел. 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 шт):
Советую вам прочитать про 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)
}
Не очень понимаю зачем несколько раз по массиву надо проходиться и зачем писать код, который сам же потом не можешь модифицировать
Если уж однострочными методами вам сложно, то вам надо начать с самый простых и очевидных реализаций, например через самый обычный цикл 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());