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

#1

Нужно сделать функцию, которая складывает все элементы массива и выводит на консоль их сумму
Принимает она естественно массив. Вот такое дело. Нужна Ваша помощь!

0 Likes

Как рекурсивно найти сумму элементов массива
#2
var arr = [3,2,5,6];
function arraySum(array){
var sum = 0;
for(var i = 0; i < array.length; i++){
    sum += array[i];
    }
console.log(sum);
}
arraySum(arr);

так подойдет? спрашивай, вместе разберемся.Массив можно задать или раньше, как в примере, или при вызове функции: например - arraySum([5,9,7,2,5])

1 Like

#3

таааак…подходит конечно. сейчас переварю информацию и задам вопрос

1 Like

#4

а можно записать например : var sum = function (arraySum){ ?
или это одно и тоже ? или глупость?

0 Likes

#5

Смотря что хочешь сделать. Конкретно к этому примеру работать так не будет без переименования остальных переменных. Если запишешь var sum = function (arraySum){} то твоя функция будет называться sum. и вызывать ее надо будет как sum();

0 Likes

#6

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

0 Likes

#7

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

0 Likes

#8

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

0 Likes

#9

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

0 Likes

#10

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

0 Likes

#11

Массив заполняется посредством введенных пользователем чисел. При выводе суммы, как таковую не выводит. В чем ошибка?
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);

0 Likes

#12

Функция 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);
0 Likes

#13

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

0 Likes

#14

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

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

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

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

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 Like

#15

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

0 Likes

#16

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

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

0 Likes

#17

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

0 Likes

#18

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

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

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

#19

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

0 Likes

#20

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

0 Likes