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

use lodash operators in nested properties

我有对象数组

{
  "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
  ]
}

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

结果应该是这样的:

[10, 2, 0]

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

我对可以做什么有一个高级解决方案。这不是使用 lodash 运算符,但可以作为一个很好的起点。

const 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"
        },
      ]
    }
  ]
}

const arr = [];

data.analytics.forEach(intentObj => {
  intentObj.intents_count.forEach(obj => {
    //calculating the index to store the value in array.
    const index = obj.intent[6] - 1;
    if (arr[index] !== undefined) {
      arr[index] = arr[index] + obj.count;
    } else {
      arr[index] = obj.count;
    }
  });
});

console.log(arr);

您需要先平整 select 所需的数组“analytics”。然后用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)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>