簡體   English   中英

生成嵌套值數組的最小值、最大值、平均值

[英]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 })

您需要mapreduce的組合來生產您所追求的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM