Задать вопрос
@vityuba

Как найти сумму элементов вложенных массивов?

Как найти сумму элементов массива? В массиве могут быть элементы любого типа и любая вложенность.

Например:

const array = [1, 2, 3, {}, NaN, [2, 4, 5, []]]
  • Вопрос задан
  • 594 просмотра
Подписаться 1 Средний 3 комментария
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
Рекурсия есть:

const sum = data =>
  Array.isArray(data)
    ? data.reduce((acc, n) => acc + sum(n), 0)
    : (+data || 0);

Рекурсии нет:

function sum(data) {
  let result = 0;

  for (const stack = [ data ]; stack.length;) {
    const n = stack.pop();
    if (n instanceof Array) {
      stack.push(...n);
    } else {
      result += +n || 0;
    }
  }

  return result;
}

Здесь, конечно, будет складываться всё, что можно сложить. Т.е., не только собственно числа, но и всё, что может быть сведено к числу, например true, '0xBB', { valueOf: () => 666 } и т.д.

Если нужно складывать только числа - предлагаю подумать самостоятельно, как изменить представленный код.
Ответ написан
otdameskapizm
@otdameskapizm
Помог ответ? Отметь решением...
Можете решить через агрегацию данных
const sum = (coll) => {
  const result = coll.reduce((acc, item) => {
    return acc += Array.isArray(item) ? sum(item) : (Number(item) || 0);
  }, 0);
  return result;
};
Ответ написан
@WAR_VIK
Если нужно сложить только числа, то можно вот так:
let print = s => console.log(s);
let arr = [1,'3', 2, 3, {}, NaN, [2, 4, 5, []]];
arr = arr.flat(Infinity);
let sum = 0;
for(let el of arr) {
  if(Number.isFinite(el)) sum += el;
}
print(sum);

Или так:
let print = s => console.log(s);
let arr = [1, '3', 2, 3, {}, NaN, [2, 4, 5, [] ]];
let sum = arr.flat(Infinity).filter(el => Number.isFinite(el)).reduce((acc,el) => acc + el, 0);
print(sum);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы