使用lodash的数组嵌套对象groupBy。

问题描述 投票:0回答:1

我有一个JSON对象,如下图所示。

response = [{
"Myanmar": [{
    "EDCBA0000013620": {
        "mou": 0.0,
        "CA": 1.0,
        "CCS": 0.0,
        "COC": 0.0
    }
}],
"Gibraltar": [{
    "ABCDE0000013643": {
        "mou": 12.850000381469727,
        "CA": 1.0,
        "CCS": 1.0,
        "COC": 3.0
    }
}],
"Cyprus": [{
    "ABCDE0000010121": {
        "mou": 36.25,
        "CA": 3.0,
        "CCS": 2.0,
        "COC": 7.0
    },
    "ABCDE0000013643": {
        "mou": 27.299999237060547,
        "CA": 1.0,
        "CCS": 1.0,
        "COC": 6.0
    },
    "ABCDE0000013662": {
        "mou": 80.59999752044678,
        "CA": 4.0,
        "CCS": 4.0,
        "COC": 14.0
    },
    "ABCDE0000010328": {
        "mou": 26.716670513153076,
        "CA": 4.0,
        "CCS": 4.0,
        "COC": 6.0
    }
}],
"Kazakhstan": [{
    "EDCBA0000013620": {
        "mou": 0.0,
        "CA": 32.0,
        "CCS": 0.0,
        "COC": 0.0
    },
    "ABCDE0000013643": {
        "mou": 17.0,
        "CA": 1.0,
        "CCS": 1.0,
        "COC": 3.0
    },
    "ABCDE0000010121": {
        "mou": 15.783329963684082,
        "CA": 1.0,
        "CCS": 1.0,
        "COC": 4.0
    },
    "EDCBA0000015450": {
        "mou": 11.683329582214355,
        "CA": 23.0,
        "CCS": 1.0,
        "COC": 3.0
    },
    "ABCDE0000010328": {
        "mou": 0.0,
        "CA": 0.0,
        "CCS": 0.0,
        "COC": 4.0
    },
    "EDCBA0000015451": {
        "mou": 11.316670417785645,
        "CA": 29.0,
        "CCS": 1.0,
        "COC": 2.0
    },
    "EDCBA0000010541": {
        "mou": 17.316669464111328,
        "CA": 30.0,
        "CCS": 1.0,
        "COC": 3.0
    }
}],
"Portugal": [{
    "ABCDE0000013643": {
        "mou": 352.2333300113678,
        "CA": 30.0,
        "CCS": 30.0,
        "COC": 67.0
    },
    "ABCDE0000010121": {
        "mou": 342.4499905705452,
        "CA": 25.0,
        "CCS": 24.0,
        "COC": 65.0
    },
    "EDCBA0000013620": {
        "mou": 85.1666567698121,
        "CA": 3.0,
        "CCS": 3.0,
        "COC": 19.0
    },
    "ABCDE0000013662": {
        "mou": 478.6499952673912,
        "CA": 26.0,
        "CCS": 26.0,
        "COC": 92.0
    },
    "ABCDE0000010328": {
        "mou": 347.5833450257778,
        "CA": 25.0,
        "CCS": 25.0,
        "COC": 57.0
    },
    "EDCBA0000015450": {
        "mou": 15.883330345153809,
        "CA": 1.0,
        "CCS": 1.0,
        "COC": 4.0
    },
    "EDCBA0000055797": {
        "mou": 31.799999237060547,
        "CA": 2.0,
        "CCS": 2.0,
        "COC": 4.0
    },
    "EDCBA0000015451": {
        "mou": 9.150000035762787,
        "CA": 3.0,
        "CCS": 2.0,
        "COC": 1.0
    },
    "EDCBA0000010541": {
        "mou": 57.78332122415304,
        "CA": 8.0,
        "CCS": 5.0,
        "COC": 11.0
    }
}],
"Iceland": [{
    "ABCDE0000013662": {
        "mou": 1.783329963684082,
        "CA": 1.0,
        "CCS": 1.0,
        "COC": 0.0
    }
}]

}]

我想实现的是根据每个国家数组中的键的子串对每个国家的数据进行分组。

希望使用JSON格式。

"Cyprus": [
"ABCDE": {
    "ABCDE0000010121": {
        "mou": 36.25,
        "CA": 3.0,
        "CCS": 2.0,
        "COC": 7.0
    },
    "ABCDE0000013643": {
        "mou": 27.299999237060547,
        "CA": 1.0,
        "CCS": 1.0,
        "COC": 6.0
    }
},
"EDCBA": {
    "EDCBA0000013662": {
        "mou": 80.59999752044678,
        "CA": 4.0,
        "CCS": 4.0,
        "COC": 14.0
    },
    "EDCBA0000010328": {
        "mou": 26.716670513153076,
        "CA": 4.0,
        "CCS": 4.0,
        "COC": 6.0
    }
}

]我试着用loadash来实现这个功能,但是没有成功。

下面是我用loadash写的函数。

res=[
            {
                "Myanmar": [
                    {
                        "EDCBA0000013620": {
                            "mou": 0.0,
                            "CA": 1.0,
                            "CCS": 0.0,
                            "COC": 0.0
                        }
                    }
                ],
                "Gibraltar": [
                    {
                        "ABCDE0000013643": {
                            "mou": 12.850000381469727,
                            "CA": 1.0,
                            "CCS": 1.0,
                            "COC": 3.0
                        }
                    }
                ],
                "Cyprus": [
                    {
                        "ABCDE0000010121": {
                            "mou": 36.25,
                            "CA": 3.0,
                            "CCS": 2.0,
                            "COC": 7.0
                        },
                        "ABCDE0000013643": {
                            "mou": 27.299999237060547,
                            "CA": 1.0,
                            "CCS": 1.0,
                            "COC": 6.0
                        },
                        "ABCDE0000013662": {
                            "mou": 80.59999752044678,
                            "CA": 4.0,
                            "CCS": 4.0,
                            "COC": 14.0
                        },
                        "ABCDE0000010328": {
                            "mou": 26.716670513153076,
                            "CA": 4.0,
                            "CCS": 4.0,
                            "COC": 6.0
                        }
                    }
                ],
                "Kazakhstan": [
                    {
                        "EDCBA0000013620": {
                            "mou": 0.0,
                            "CA": 32.0,
                            "CCS": 0.0,
                            "COC": 0.0
                        },
                        "ABCDE0000013643": {
                            "mou": 17.0,
                            "CA": 1.0,
                            "CCS": 1.0,
                            "COC": 3.0
                        },
                        "ABCDE0000010121": {
                            "mou": 15.783329963684082,
                            "CA": 1.0,
                            "CCS": 1.0,
                            "COC": 4.0
                        },
                        "EDCBA0000015450": {
                            "mou": 11.683329582214355,
                            "CA": 23.0,
                            "CCS": 1.0,
                            "COC": 3.0
                        },
                        "ABCDE0000010328": {
                            "mou": 0.0,
                            "CA": 0.0,
                            "CCS": 0.0,
                            "COC": 4.0
                        },
                        "EDCBA0000015451": {
                            "mou": 11.316670417785645,
                            "CA": 29.0,
                            "CCS": 1.0,
                            "COC": 2.0
                        },
                        "EDCBA0000010541": {
                            "mou": 17.316669464111328,
                            "CA": 30.0,
                            "CCS": 1.0,
                            "COC": 3.0
                        }
                    }
                ],
                "Portugal": [
                    {
                        "ABCDE0000013643": {
                            "mou": 352.2333300113678,
                            "CA": 30.0,
                            "CCS": 30.0,
                            "COC": 67.0
                        },
                        "ABCDE0000010121": {
                            "mou": 342.4499905705452,
                            "CA": 25.0,
                            "CCS": 24.0,
                            "COC": 65.0
                        },
                        "EDCBA0000013620": {
                            "mou": 85.1666567698121,
                            "CA": 3.0,
                            "CCS": 3.0,
                            "COC": 19.0
                        },
                        "ABCDE0000013662": {
                            "mou": 478.6499952673912,
                            "CA": 26.0,
                            "CCS": 26.0,
                            "COC": 92.0
                        },
                        "ABCDE0000010328": {
                            "mou": 347.5833450257778,
                            "CA": 25.0,
                            "CCS": 25.0,
                            "COC": 57.0
                        },
                        "EDCBA0000015450": {
                            "mou": 15.883330345153809,
                            "CA": 1.0,
                            "CCS": 1.0,
                            "COC": 4.0
                        },
                        "EDCBA0000055797": {
                            "mou": 31.799999237060547,
                            "CA": 2.0,
                            "CCS": 2.0,
                            "COC": 4.0
                        },
                        "EDCBA0000015451": {
                            "mou": 9.150000035762787,
                            "CA": 3.0,
                            "CCS": 2.0,
                            "COC": 1.0
                        },
                        "EDCBA0000010541": {
                            "mou": 57.78332122415304,
                            "CA": 8.0,
                            "CCS": 5.0,
                            "COC": 11.0
                        }
                    }
                ],
                "Iceland": [
                    {
                        "ABCDE0000013662": {
                            "mou": 1.783329963684082,
                            "CA": 1.0,
                            "CCS": 1.0,
                            "COC": 0.0
                        }
                    }
                ]
				}
		]


var result = _.map(_.flatMap(res));
    // console.log(result,"result");
    for (let [key, value] of Object.entries(result[0])){
      for(let[ikey,ivalue]of Object.entries(value)){
        for(let[valueKey,valueArr] of Object.entries(ivalue)){
          // console.log(valueKey,valueArr);
          valueArr.trunkId = valueKey
          valueArr[name] = key;
        this.groupedData.push(valueArr);
        } 
      }
    }
   let result1 =  _.chain(this.groupedData)
    .groupBy("previewFrame")
    .map((value, key) => ({ country: key, trunks: value }))
    .value()
    console.log(JSON.stringify(result1))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>

我能够对一级数据进行分组,但在lodash中如何使用key的子串对Object内的数组进行分组.我卡在这里,请帮助我.Thanks in Advance.

javascript angular typescript lodash vanilla-typescript
1个回答
0
投票

你可以对条目进行映射,并为国家建立一个新的分组级别。

var data = [{ Myanmar: [{ EDCBA0000013620: { mou: 0, CA: 1, CCS: 0, COC: 0 } }], Gibraltar: [{ ABCDE0000013643: { mou: 12.850000381469727, CA: 1, CCS: 1, COC: 3 } }], Cyprus: [{ ABCDE0000010121: { mou: 36.25, CA: 3, CCS: 2, COC: 7 }, ABCDE0000013643: { mou: 27.299999237060547, CA: 1, CCS: 1, COC: 6 }, ABCDE0000013662: { mou: 80.59999752044678, CA: 4, CCS: 4, COC: 14 }, ABCDE0000010328: { mou: 26.716670513153076, CA: 4, CCS: 4, COC: 6 } }], Kazakhstan: [{ EDCBA0000013620: { mou: 0, CA: 32, CCS: 0, COC: 0 }, ABCDE0000013643: { mou: 17, CA: 1, CCS: 1, COC: 3 }, ABCDE0000010121: { mou: 15.783329963684082, CA: 1, CCS: 1, COC: 4 }, EDCBA0000015450: { mou: 11.683329582214355, CA: 23, CCS: 1, COC: 3 }, ABCDE0000010328: { mou: 0, CA: 0, CCS: 0, COC: 4 }, EDCBA0000015451: { mou: 11.316670417785645, CA: 29, CCS: 1, COC: 2 }, EDCBA0000010541: { mou: 17.316669464111328, CA: 30, CCS: 1, COC: 3 } }], Portugal: [{ ABCDE0000013643: { mou: 352.2333300113678, CA: 30, CCS: 30, COC: 67 }, ABCDE0000010121: { mou: 342.4499905705452, CA: 25, CCS: 24, COC: 65 }, EDCBA0000013620: { mou: 85.1666567698121, CA: 3, CCS: 3, COC: 19 }, ABCDE0000013662: { mou: 478.6499952673912, CA: 26, CCS: 26, COC: 92 }, ABCDE0000010328: { mou: 347.5833450257778, CA: 25, CCS: 25, COC: 57 }, EDCBA0000015450: { mou: 15.883330345153809, CA: 1, CCS: 1, COC: 4 }, EDCBA0000055797: { mou: 31.799999237060547, CA: 2, CCS: 2, COC: 4 }, EDCBA0000015451: { mou: 9.150000035762787, CA: 3, CCS: 2, COC: 1 }, EDCBA0000010541: { mou: 57.78332122415304, CA: 8, CCS: 5, COC: 11 } }], Iceland: [{ ABCDE0000013662: { mou: 1.783329963684082, CA: 1, CCS: 1, COC: 0 } }] }],
    result = data.map(o => Object.fromEntries(Object.entries(o).map(([k, v]) => [
        k,
        v.map(o => Object.entries(o).reduce((r, [l, w]) => {
            const key = l.slice(0, 5);
            r[key] = r[key] || {};
            r[key][l] = w;
            return r;
        }, {}))
    ])));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
© www.soinside.com 2019 - 2024. All rights reserved.