在嵌套属性中使用 lodash 运算符

Ami*_*ani 0 javascript arrays grouping typescript lodash

我有对象数组

{
  "agent_name": "AgentName",
  "analytics": [
    {
      "date": "Tue, 1 Aug 2021 00:00:00 GMT",
      "intents_count":[
         {
           "count": 5,
           "intent": "intent1"
         },
         {
          "count": 1,
          "intent": "intent2"
         },
         {
           "count": 0,
           "intent": "intent3"
         },
       ]
    },
    {
      "date": "Tue, 2 Aug 2021 00:00:00 GMT",
      "intents_count":[
         {
           "count": 5,
           "intent": "intent1"
         },
         {
          "count": 1,
          "intent": "intent2"
         },
         {
           "count": 0,
           "intent": "intent3"
         },
       ]
    },
    ... the same for the next days of month
  ]
}
Run Code Online (Sandbox Code Playgroud)

我需要获取按日期分组的每个意图的计数总和。

结果应该是这样的:

[10, 2, 0]
Run Code Online (Sandbox Code Playgroud)

其中 10 对应于所有天中意图“intent1”的计数字段的总和。

小智 5

您需要先平展并选择所需的数组“分析”。然后使用 groupBy 和 sum 得到最终结果。

let data = {
  "agent_name": "AgentName",
  "analytics": [
    {
      "date": "Tue, 1 Aug 2021 00:00:00 GMT",
      "intents_count":[
         {
           "count": 5,
           "intent": "intent1"
         },
         {
          "count": 1,
          "intent": "intent2"
         },
         {
           "count": 0,
           "intent": "intent3"
         },
       ]
    },
    {
      "date": "Tue, 2 Aug 2021 00:00:00 GMT",
      "intents_count":[
         {
           "count": 5,
           "intent": "intent1"
         },
         {
          "count": 1,
          "intent": "intent2"
         },
         {
           "count": 0,
           "intent": "intent3"
         },
       ]
    },
  ]
}

let flatResult = _.flatMap(data.analytics, 'intents_count');
let result = _(flatResult).groupBy('intent').map(x => _.sumBy(x, 'count'));
console.log(result)
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)