Задать вопрос
@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 в таком объекте, глубина вложенности заранее неизвестна
  • Вопрос задан
  • 273 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Рекурсия есть:

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

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

const sum = function(data) {
  const stack = [];
  let result = 0;

  for (let [ i, arr ] = this(data); ++i < arr.length || stack.length;) {
    if (i === arr.length) {
      [ i, arr ] = stack.pop();
    } else {
      result += arr[i].value;
      stack.push([ i, arr ]);
      [ i, arr ] = this(arr[i].children || []);
    }
  }

  return result;
}.bind(x => [ -1, Array.isArray(x) ? x : [ x ] ]);

Считаем:

sum(valueList) // 418
sum(valueList.children) // 268
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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