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

    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
    Ответ написан
    Комментировать