我有一個陣列,如下所示:
[
{
Region: 'Sionnach',
Area: 'Station',
Codes: '76534675'
},
{
Region: 'Cape',
Area: 'Dreg',
Codes: '73457347'
},
{
Region: 'Cape',
Area: 'Dreg',
Codes: '7653737'
},
{
Region: 'Stone',
Area: 'Lights',
Codes: '612342136'
},
{
Region: 'Stone',
Area: 'Pram',
Codes:'73247237'
},
]
我希望它顯示如下:
[
{
Region: "Sionnach",
Area: {
Station: {
Codes: "76534675",
},
},
},
{
Region: "Cape",
Area: {
Dreg: {
Codes: "73457347",
Codes: "7653737",
},
},
},
{
Region: "Stone",
Area: {
Lights: {
Codes: "612342136",
},
Pram: {
Codes: "73247237",
},
},
},
]
有人可以讓我知道我如何做到這一點嗎?我嘗試了很多方法,但我似乎無法弄清楚我需要做什么,它可能真的很簡單,在這里坐了 3 個小時,我似乎無法找到一種方法來做到這一點。
uj5u.com熱心網友回復:
您不能擁有具有兩個相同鍵的物件,例如
{ Codes: "73457347", Codes: "7653737" }
所以我建議將它們保存為一個陣列,因為一個區域似乎可能有多個代碼。
為了實作你想要的:
- 使用
Array#reduce,迭代陣列,同時更新Map區域為key,預期的分組區域物件為value。在每次迭代中,如果存在,則獲取當前區域記錄。然后,更新它的Area物件,其中當前區域是鍵,它的代碼串列是值。最后,使用Map#set. - 使用
Map#values,您最終會得到帶有相應區域的區域分組串列。
const arr = [ { Region: 'Sionnach', Area: 'Station', Codes: '76534675' }, { Region: 'Cape', Area: 'Dreg', Codes: '73457347' }, { Region: 'Cape', Area: 'Dreg', Codes: '7653737' }, { Region: 'Stone', Area: 'Lights', Codes: '612342136' }, { Region: 'Stone', Area: 'Pram', Codes:'73247237' } ];
const res = [...
arr.reduce((map, { Region, Area, Codes }) => {
const regionAreas = map.get(Region)?.Area ?? {};
regionAreas[Area] = [...(regionAreas[Area] ?? []), Codes];
map.set(Region, { Region, Area: regionAreas });
return map;
}, new Map)
.values()
];
console.log(res);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386026.html
