【发布时间】:2020-06-03 16:02:36
【问题描述】:
我有一个如下所示的 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 中如何使用键的子字符串将数组分组到 Object 中。 我被困在这里, 请帮忙。 提前致谢
【问题讨论】:
-
塞浦路斯的
EDCBA来自哪里? -
它的动态数据,我只是将我预期的 JSON 作为塞浦路斯对象提供了可能的值。
-
顺便说一句,您的结果无效。多余的数组怎么办?
标签: javascript angular lodash typescript