簡體   English   中英

groupBy 嵌套 Object 使用 lodash 數組

[英]groupBy Nested Object with array using lodash

我有一個 JSON Object 如下所示。

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
    }
}]

}]

我想要實現的是根據每個國家/地區數組中鍵的 substring 對每個國家/地區數據進行分組。

預期 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 編寫的 function。

 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 中,如何使用密鑰 substring 將數組分組到 Object 中。 我被困在這里,請幫助。 提前致謝

您可以 map 條目並為國家/地區建立新的分組級別。

 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; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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