【问题标题】:Javascript how to use reduce to get sum of an attribute's value from nested objects?Javascript如何使用reduce从嵌套对象中获取属性值的总和?
【发布时间】:2020-07-28 04:15:02
【问题描述】:

我有一个像下面这样的对象:

data_sample = {
  "object_1": {
    "irrelevant_data1": 0,
    "irrelevant_data2": 0,
    "data_needed_to_sum_up": 100,
  },
  "object_a": {
    "irrelevant_data1": 0,
    "irrelevant_data2": 0,
    "irrelevant_data3": 0,
    "data_needed_to_sum_up": 200,
  },
  "object_d": {
    "irrelevant_data1": 0,
    "irrelevant_data2": 0,
    "data_needed_to_sum_up": 300,
  },
}

如何使用reduce 方法获取data_needed_to_sum_up 内部data_sample 中的sum 以获得600 的预期结果?

【问题讨论】:

  • 谢谢大家。所以我所拥有的只是一个对象,因此需要Object.values 来获取reduce 方法的数组以使其可用,然后使用.reduce((acc,curr) => acc = acc + curr["data_needed_to_sum_up"],0) 实现所需的结果@

标签: javascript object methods nested reduce


【解决方案1】:

您可以使用Object.valuesto,然后使用reduce

data_sample = { "object_1": { "irrelevant_data1": 0, "irrelevant_data2": 0, "data_needed_to_sum_up": 100, }, "object_a": { "irrelevant_data1": 0, "irrelevant_data2": 0, "irrelevant_data3": 0, "data_needed_to_sum_up": 200, }, "object_d": { "irrelevant_data1": 0, "irrelevant_data2": 0, "data_needed_to_sum_up": 300, }, }
res = Object.values(data_sample)
    .reduce((acc,curr) => acc = acc + curr["data_needed_to_sum_up"],0)
console.log(res)

【讨论】:

    【解决方案2】:

    .reduce 适用于数组,您所拥有的只是一个对象,但您可以将.reduceObject.entries 结合使用,如下所示:

    data_sample = {
      "object_1": {
        "irrelevant_data1": 0,
        "irrelevant_data2": 0,
        "data_needed_to_sum_up": 100,
      },
      "object_a": {
        "irrelevant_data1": 0,
        "irrelevant_data2": 0,
        "irrelevant_data3": 0,
        "data_needed_to_sum_up": 200,
      },
      "object_d": {
        "irrelevant_data1": 0,
        "irrelevant_data2": 0,
        "data_needed_to_sum_up": 300,
      },
    }
    
    console.log(Object.entries(data_sample).reduce((carry, [_, current]) => carry + current.data_needed_to_sum_up, 0))

    【讨论】:

      【解决方案3】:

      您可以在Object.values 上使用Array#reduce

      let sum = Object.values(data_sample)
               .reduce((acc,cur)=>acc+cur.data_needed_to_sum_up,0);
      

      【讨论】:

        【解决方案4】:

        试试这个:

        console.log(Object.values(data_sample).map((x) => x.data_needed_to_sum_up).reduce((x, y) => x + y));

        【讨论】:

          【解决方案5】:

          先使用 Object.values 再使用 reduce

          【讨论】:

            猜你喜欢
            • 2013-10-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-17
            • 1970-01-01
            • 2018-02-06
            相关资源
            最近更新 更多