@CubaJas
Web-программист

Как посчитать сумму вложенных элементов при неизвестной глубине объекта?

Есть объект, варианты которого могут быть
category.items = ['a', 'b']
category.subCategory.items = ['c', 'd', 'e', 'f']
category.subCategory.subCategory.....items = ['g', 'h']


Как на JS посчитать сумму всех items для category?
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Рекурсия есть:

const sumNested = (data, getVal, key) => Object
  .entries(data instanceof Object ? data : {})
  .reduce((acc, [ k, v ]) => acc + sumNested(v, getVal, k), getVal(key, data));


const numItems = sumNested(obj, (k, v) => (k === 'items' && Array.isArray(v)) ? v.length : 0);

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

function sumNested(data, getVal) {
  let result = 0;

  for (const stack = [ [ , data ] ]; stack.length; ) {
    const [ k, v ] = stack.pop();
    stack.push(...(v instanceof Object ? Object.entries(v) : []));
    result += getVal(k, v);
  }

  return result;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
streetflush
@streetflush
Рекурсивно
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы