按属性和嵌套json与对象数组之间的值之和进行分组

时间:2016-12-06 10:49:16

标签: group-by sum lodash

我有一个名为

的用户数组
var users = [{'name':'zulekha'}, {'name':'deepika'}];

我从jira API获取每个用户的工作日志。所以我得到这样的对象。

var worklogResult = {
  "issues": [
    {
      "fields": {
        "worklog": {
          "worklogs": [
            {
              "author": {
                "name": "zulekha",
              },
              "timeSpentSeconds": 180
            },
            {
              "author": {
                "name": "deepika",
              },
              "timeSpentSeconds": 210
            }
          ]
        }
      }
    },
    {
      "fields": {
        "worklog": {
          "worklogs": [
            {
              "author": {
                "name": "deepika",
              },
              "timeSpentSeconds": 140
            }
          ]
        }
      }
    },
    {
      "fields": {
        "worklog": {
          "worklogs": [
            {
              "author": {
                "name": "zulekha",
              },
              "timeSpentSeconds": 600,
            }
          ]
        }
      }
    },
    {
      "fields": {
        "worklog": {
          "worklogs": []
        }
      }
    }
  ]
}

现在我想将 worklogResult 用户匹配,以便我可以获得以下输出。

output = [{'name':'zulekha','timeSpentSeconds':780},{'name':'deepika','timeSpentSeconds':350}]

有谁能建议我如何实现这个目标?

1 个答案:

答案 0 :(得分:1)

使用_.flatMap来平展嵌套对象

_.chain(worklogResult.issues)
    .flatMap('fields.worklog.worklogs')
    .thru(function(spents) {
        return _.map(users, function(user) {
            return _.merge(user, {
                timeSpentSeconds: _.chain(spents)
                    .filter(['author.name', user.name])
                    .map('timeSpentSeconds')
                    .sum()
                    .value()
            })
        })
    })
    .value()