@vitaliyserebryanskiy

Как посчитать сумму значений полей в объекте?

const valueList = {
    prop: 'prop1',
    value: 150,
    children: [
     {
         prop: 'prop1',
         value: 14
      }, {
        prop: 'prop1',
        value: 10,
       children:  [
     {
         prop: 'prop1',
         value: 14
      }, {
        prop: 'prop1',
        value: 10,
       children: []
      },{
        prop: 'prop1',
        value: 110,
      }
    ]
      },{
        prop: 'prop1',
        value: 110,
      }
    ]
}

Здравствуйте, как можно посчитать сумму полей value в таком объекте, глубина вложенности заранее неизвестна
  • Вопрос задан
  • 242 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Рекурсия есть:

const sum = data =>
  (data instanceof Array ? data : [ data ]).reduce((acc, n) => {
    return acc + n.value + sum(n.children || []);
  }, 0);


const valueSum = sum(valueList);

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

function sum(data) {
  let result = 0;

  for (const stack = [].concat(data); stack.length; ) {
    const { value, children } = stack.pop();
    stack.push(...(Array.isArray(children) ? children : []));
    result += value;
  }

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

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

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