Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как найти сумму чисел массива? (https://javascript.ru/forum/dom-window/78465-kak-najjti-summu-chisel-massiva.html)

gsdev99 18.09.2019 10:18

Как найти сумму чисел массива?
 
Как найти сумму чисел массива?
В круглых скобках входные данные, далее результат.
// ([1, 2, '3x']) => 6
// ([1, 2, 'x3']) => 3
// ([1, [1, 2], 2]) => 6

ksa 18.09.2019 10:26

Цитата:

Сообщение от gsdev99
Как найти сумму чисел массива?

Написать функцию с таким алгоритмом:

Обнулить счетчик.
Пройтись в цикле по всем элементам...
Если значение строка - приводить ее к числу, прибавить значение к счетчику...
Если значение массив - вызывать себя рекурсивно, прибавить значение к счетчику...
Если число - прибавить значение к счетчику...
По окончании прохода вернуть значение счетчика.

Alexandroppolus 18.09.2019 11:55

Цитата:

Сообщение от ksa
Если значение строка - приводить ее к числу, прибавить значение к счетчику...

тут не забыть проверить isNaN()

ruslan_mart 18.09.2019 12:42

const sum = function sum(arr) {
  arr = arr.map(n => Array.isArray(n) ? sum(n) : parseFloat(n) || 0);
  return eval(arr.join('+'));
}

alert(sum([1, 2, '3x']));
alert(sum([1, 2, 'x3']));
alert(sum([1, [1, 2], 2]));



or

const sum = arr => eval(arr.map(n => Array.isArray(n) ? sum(n) : parseFloat(n) || 0).join('+'));

alert(sum([1, 2, '3x']));
alert(sum([1, 2, 'x3']));
alert(sum([1, [1, 2], 2]));


or

const sum = function sum(arr) {
  let res = 0;
  
  for (const n of arr) {
  	res += Array.isArray(n) ? sum(n) : parseFloat(n) || 0;
  }
  return res;
}

alert(sum([1, 2, '3x']));
alert(sum([1, 2, 'x3']));
alert(sum([1, [1, 2], 2]));

рони 18.09.2019 13:27

:) :write:
const sum = arr => arr.flat().reduce((sum, x) => sum += (x = parseFloat(x)) ? x : 0, 0)


alert(sum([1, 2, '3x']));
alert(sum([1, 2, 'x3']));
alert(sum([1, [1, 2], 2]));

Malleys 18.09.2019 15:21

const sum = arr => arr.flat().map(x => parseFloat(x) || 0).reduce((a, b) => a + b, 0);

alert(sum([1, 2, '3x']));
alert(sum([1, 2, 'x3']));
alert(sum([1, [1, 2], 2]));

gsdev99 18.09.2019 18:56

Всем спасибо. Есть над чем посидеть поразбираться.


Часовой пояс GMT +3, время: 18:23.