Как найти сумму элементов массива

тут даже будет объявляться функция summ которая берет на вход функцию arraySum

а есть разница ? то есть лучше делать как ты написал или как я ?

лучше делать как написал andy_gold , во избежание ненужного кода, попробуй написать и вывести в консульку 2 варианта, и сразу поймешь.

Лучше сразу почитать про именование, определения функций. Аргументы функций, которые она принимает.
http://javascript.ru/basic/functions

reduce - arr.reduce(function(a,b){return(a+b)}) -
для данного случая

1 лайк

Массив заполняется посредством введенных пользователем чисел. При выводе суммы, как таковую не выводит. В чем ошибка?
var UserInput,
EnteredNumbers = [];
var finish = ‘exit’;

while(UserInput != finish) {UserInput = prompt(‘Введите любое число’); EnteredNumbers.push(UserInput);}
EnteredNumbers.pop();
console.log(EnteredNumbers);
var sum = 0;

for (i=0; i < EnteredNumbers.length; i++) {
sum = sum + EnteredNumbers[i];}
console.log (‘Сумма элементов массива:’ +sum);

Функция prompt, которая используется для наполнения массива EnteredNumbers, возвращает строковое значение. Поэтому в цикле происходит конкатенация строк, а не суммирование чисел. Используй parseFloat для распарсивания строк в числа.

parseFloat('1.99') // 1.99
parseFloat('1') // 1

Есть нюанс: parseFloat не понимает запятую как разделитель:
parseFloat('1,99'), но это уже нюансы обработки пользовательского ввода.

var UserInput,
EnteredNumbers = [];
var finish = 'exit';

while(UserInput != finish) {UserInput = prompt('Введите любое число'); EnteredNumbers.push(parseFloat(UserInput));}
EnteredNumbers.pop();
console.log(EnteredNumbers);
var sum = 0;

for (i=0; i < EnteredNumbers.length; i++) {
sum = sum + EnteredNumbers[i];}
console.log ('Сумма элементов массива:' +sum);

А что если в массив будут записаны не только числа, но и буквы? Каким оператором можно их пропускать?

Предположу что удобнее было вычленить только числа без учета того какие данные других типов могут быть в массиве. Пример такого решения и опишу.

В js дикая система определения типов (тут подробнее https://bonsaiden.github.io/JavaScript-Garden/ru/#types), и единственный 100% способ определить что в переменной variable находится число, выглядит так:

if (Object.prototype.toString.call(variable) === '[object Number]') {
  // действия для числа
}

зная это, изменим решение Как найти сумму элементов массива - #2 от пользователя andy_gold так, чтобы суммировались только числа:

var arr = [3, 2, '999', 5, 6, [], {
	lol: true
}];

function arraySum(array) {
	var sum = 0;
	for (var i = 0; i < array.length; i++) {
		if (Object.prototype.toString.call(array[i]) === '[object Number]') {
			sum += array[i];
		}
	}
	return sum
}
console.log(arraySum(arr)) // 16
1 лайк

function arraySum(arr) {
return arr
.toString().split(’,’)
.map(el => parseFloat(el))
.filter(el => !Number.isNaN(el))
.reduce((acc, cur) => acc + cur);
}

Так не надо. Превращение массива данных в строку с преобразованием типов ради неясной выгоды вредно.

Если хочешь описать код так, чтобы суммировались только числовые элементы массива, то отфильтровать нечисловые значения можно в теле reduce. Кода будет меньше и избавишься от неявного приведения типов.

В моем случае был многоуровневый массив.

Даже для многоуровневого так лучше не делать. Для многоуровневого нужно писать рекурсивную функцию.

И посмотри как такая реализация поведет себя со следующими аргументами:

arraySum([1, 2, 3, 4, '10 monkeys'])

спасибо очень помог

Здравствуйте, подскажите пожалуйста, как с помощью рекурсии получить сумму всех элементов массива? Спасибо!

Ответил в отдельной теме: Как рекурсивно найти сумму элементов массива. В целом не стесняйся создавать новые темы. Так удобнее держать обсуждения в рамках обсуждаемого вопроса.

1 лайк

function sumArray(a) {
let res = a.join(’+’);
return eval(res);
}

const summArr = (arr) => arr.reduce((acc, curr) => isNaN(Number(curr)) ? acc : acc + Number(curr), 0)

Решение поиска суммы элементов массива через рекурсию

1е что приходит в голову это метод reduce