[英]Generate min, max, average of array of nested values
我想生成已經預先計算了最小值/最大值/平均值的“嵌套”值的最小值/最大值/平均值。 所以基本上平均的平均值,最小值的最小值,最大值的最大值,希望我足夠清楚
我有一個龐大的數據列表,其中包含每個用戶分數的最小/最大/平均值:
[
{
"name": "Joe",
"data": [
[
22323,
180.269944190979,
{
"min": 148608,
"max": 486656,
"avg": 123
}
],
[
12312,
180.269944190979,
{
"min": 148608,
"max": 486656,
"avg": 2
}
],
[
232,
180.269944190979,
{
"min": 148608,
"max": 486656,
"avg": 2323
}
]
]
},
{
"name": "Miranda",
"data": [
[
1641466800000,
180.269944190979,
{
"min": 148608,
"max": 486656,
"avg": 123
}
],
[
12312,
180.269944190979,
{
"min": 148608,
"max": 486656,
"avg": 2
}
],
[
232,
180.269944190979,
{
"min": 148608,
"max": 486656,
"avg": 2323
}
]
]
},
{
"name": "Eli",
"data": [
[
1641468540000,
5630.96112537384,
{
"min": 0,
"max": 384048,
"avg": 237031.22959263306
}
],
[
1641468420000,
5688.5411739349365,
{
"min": 157216,
"max": 384048,
"avg": 248715.63971152372
}
],
[
1641468300000,
5832.6060581207275,
{
"min": 0,
"max": 372560,
"avg": 226729.37108433736
}
],
[
1641468360000,
5836.711280345917,
{
"min": 0,
"max": 384048,
"avg": 274216.2701236057
}
]
]
}
]
我不確定如何在每個 object 中生成所有這些的平均值/最小值/最大值,例如:
[
{
"name": "Joe",
"details": {
"min": 0,
"max": 12332,
"avg": 9594.43435
}
},
{
"name": "Miranda",
"details": {
"min": 0,
"max": 65443,
"avg": 1231233.2442
}
},
{
"name": "Eli",
"details": {
"min": 0,
"max": 312321,
"avg": 544545.3345
}
}
]
我已經嘗試過reduce
但我無法讓它“記住”以前的值
我不太擅長 lodash:
data.reduce((acc, val: any) => {
acc.min = acc.min + val[2].min;
return acc;
}, { min: 0, max: 0, avg: 0 })
您需要map
和reduce
的組合來生產您所追求的 output:
const input=[{name:"Joe",data:[[22323,180.269944190979,{min:148608,max:486656,avg:123}],[12312,180.269944190979,{min:148608,max:486656,avg:2}],[232,180.269944190979,{min:148608,max:486656,avg:2323}]]},{name:"Miranda",data:[[16414668e5,180.269944190979,{min:148608,max:486656,avg:123}],[12312,180.269944190979,{min:148608,max:486656,avg:2}],[232,180.269944190979,{min:148608,max:486656,avg:2323}]]},{name:"Eli",data:[[164146854e4,5630.96112537384,{min:0,max:384048,avg:237031.22959263306}],[164146842e4,5688.5411739349365,{min:157216,max:384048,avg:248715.63971152372}],[16414683e5,5832.6060581207275,{min:0,max:372560,avg:226729.37108433736}],[164146836e4,5836.711280345917,{min:0,max:384048,avg:274216.2701236057}]]}]; const result = input.map(item => { const details = item.data.reduce( (acc,i) => { const val = i[2]; acc.min = Math.min(val.min, acc.min); acc.max = Math.max(val.max, acc.max); acc.sum += val.avg return acc; },{min:Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY, sum:0}) return { name: item.name, details:{ min: details.min, max: details.max, avg: details.sum/item.data.length } } }); console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.