在嵌套属性中使用 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>
我有对象数组
{
"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>