【问题标题】:use javascript function to sum of array of object使用 javascript 函数对对象数组求和
【发布时间】:2021-01-19 11:22:01
【问题描述】:

我有一个对象数组,看起来像

const data = [{'id': '1'}, {marks: [{ subId: '2', "submarks" : [1,2,2,0,0]}, { subId: '2', "submarks" : [1,2,2,0,0]}, { subId: '3', "submarks" : [1,2,2,10,0]} ,{ subId: '4', "submarks" : [10,5,2,0,0]}] }]

在这里,我试图得到所有submarks 的总和。

在这种情况下,输出将是

42

我试过了

const getTotal = () => {
 
 const marksArray = data['marks']
    
}

我如何得到这个?

【问题讨论】:

  • 带有marks 的对象是否总是数组中的第二项?或者该数组是否可以包含多个具有marks 数组的对象?
  • 它可以在任何地方,其他对象的名称不会相同
  • 你说你试过了,但你的尝试根本没有求和。它只是尝试检索一个名为 marks 的属性。

标签: javascript lodash


【解决方案1】:

使用_.flatMap() 两次得到一个包含所有summarks_.sum() 的数组:

const data = [{'id': '1'}, {marks: [{ subId: '2', "submarks" : [1,2,2,0,0]}, { subId: '2', "submarks" : [1,2,2,0,0]}, { subId: '3', "submarks" : [1,2,2,10,0]} ,{ subId: '4', "submarks" : [10,5,2,0,0]}] }]

const result = _.sum(_.flatMap(_.flatMap(data, 'marks'), 'submarks'))

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>

【讨论】:

    【解决方案2】:

    你可以在下面点赞。根据您的示例数据,假设标记对象始终位于第一个索引中。

    const data = [{'id': '1'}, {marks: [{ subId: '2', "submarks" : [1,2,2,0,0]}, { subId: '2', "submarks" : [1,2,2,0,0]}, { subId: '3', "submarks" : [1,2,2,10,0]} ,{ subId: '4', "submarks" : [10,5,2,0,0]}] }]
    
    const total = data[1].marks.reduce((total, obj) => {
      return total += obj.submarks.reduce((subTotal, mark) => {
        return subTotal += mark
      }, 0)
    }, 0)
    
    
    console.log(total)

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 2022-11-19
      • 1970-01-01
      • 2012-10-04
      • 2011-08-22
      • 1970-01-01
      相关资源
      最近更新 更多