Сумма массива JavaScript
Решаю задачу на CodeWars, нужно вернуть сумму массива.
Напишите функцию, которая принимает массив чисел и возвращает сумму чисел. Числа могут быть отрицательными или нецелыми. Если массив не содержит чисел, вы должны вернуть 0.
Примеры Вход: [1, 5.2, 4, 0, -1] Выход: 9.2
Вход: [] Выход: 0
Вход: [-2.398] Выход: -2.398
Я написал код таким образом, но получаю ошибку.
function sum (numbers) {
let sum = 0;
let arr = [];
for (i = 0; i < numbers.lenght; i++) {
if (numbers[i] == arr) return 0;
sum += numbers[i];
}
return sum;
};
Ошибка вот такая:
Test Results: Tests test expected 0 to equal 9.2 Completed in 3ms Completed in 6ms
Где я допустил ошибку?) Спасибо
Ответы (2 шт):
Скорее всего вы не совсем поняли условие:
Если массив не содержит чисел, вы должны вернуть 0.
Это означает, что если на вход поступит пустой массив [], то функция должна сразу же вернуть 0;
function sum(numbers) {
if (numbers.length == 0) return 0; // возвращаем 0, если длинна массива равна 0
let sum = 0;
for (let number of numbers) {
sum += number;
}
return sum;
};
console.log(sum([])); // 0
console.log(sum([1, 5.2, 4, 0, -1])); // 9.2
В этой строчке вы совершаете проверку совсем иного толка:
if (numbers[i] == arr) return 0;
Семанитика строчки такова:
если текущий элемент массива
numbersравен массивуarrвозвращаем 0;
Элемент массива numbers[i] никогда не будет равен массиву arr, только если вы сами не присвоите ему это значение вот так: numbers[i] = arr, т.к даже если numbers[i] будет пустым массивом, то вам выдаст false
console.log([] == []); // false
это 2 разных массива.
Так же, если массив будет состоять не из number, а из примитивов других типов, то можно сначала проверить, являются ли все элементы массива number:
function sum(numbers) {
if (numbers.length == 0) return 0; // возвращаем 0, если длинна массива равна 0
let sum = 0;
for (let number of numbers) {
if (typeof number !== 'number') return 0; // не все элементы массива типа number
sum += number;
}
return sum;
};
console.log(sum([[], [], {} , 2, true, false]))
Или мы можем пропускать элементы другого типа и суммировать только number:
function sum(numbers) {
if (numbers.length == 0) return 0; // возвращаем 0, если длинна массива равна 0
let sum = 0;
for (let number of numbers) {
if (typeof number !== 'number') continue; // переходим к следующей итерации
sum += number;
}
return sum;
};
console.log(sum([[], [], {} , 2, true, false, 5]))
Для таких преобразований идеально подходит метод reduce
const array = [1, 5.2, 4, 0, -1];
function getSumm(arr) {
return arr.reduce((acc, curr) => acc + curr, 0);
}
console.log(getSumm(array));