我有一個類似于這個的陣列:
[
{
"username":"player1",
"nickname":"PLayer1",
"capturedate":"06/12/2022",
"capturetime":"10:05PM"
},
{
"username":"player1",
"nickname":"PLayer1",
"capturedate":"06/12/2022",
"capturetime":"10:00PM"
},
{
"username":"player1",
"nickname":"PLayer1",
"capturedate":"06/12/2022",
"capturetime":"10:10PM"
},
{
"username":"player1",
"nickname":"PLayer1",
"capturedate":"06/12/2022",
"capturetime":"10:15PM"
},
{
"username":"player2",
"nickname":"player2",
"capturedate":"06/12/2022",
"capturetime":"10:00PM"
},
{
"username":"player2",
"nickname":"player2",
"capturedate":"06/12/2022",
"capturetime":"10:05PM"
}
]
我想改造它,使它看起來像這樣。基本上所有的 captureate 和 capturetime 都將被合并到一個僅包含條目的陣列中。
[
{
"username":"player1",
"nickname":"Player1",
"entries":[
{
"capturedate":"06/12/2022",
"capturetime":"10:05PM"
},
{
"capturedate":"06/12/2022",
"capturetime":"10:10PM"
},
{
"capturedate":"06/12/2022",
"capturetime":"10:10PM"
},
{
"capturedate":"06/12/2022",
"capturetime":"10:15PM"
}
]
},
{
"username":"player2",
"nickname":"Player2",
"entries":[
{
"capturedate":"06/12/2022",
"capturetime":"10:00PM"
},
{
"capturedate":"06/12/2022",
"capturetime":"10:05PM"
}
]
}
]
我嘗試從這里實作最有效的方法來對一組物件進行分組,但它給出了不同的集合。
uj5u.com熱心網友回復:
您可能缺少的是Object.values步驟。因為你提到的帖子有答案,分組只給最終輸出一個物件。要獲取分組物件的值,您需要使用Object.values
let arr = [ { "username":"player1", "nickname":"PLayer1", "capturedate":"06/12/2022", "capturetime":"10:05PM" }, { "username":"player1", "nickname":"PLayer1", "capturedate":"06/12/2022", "capturetime":"10:00PM" }, { "username":"player1", "nickname":"PLayer1", "capturedate":"06/12/2022", "capturetime":"10:10PM" }, { "username":"player1", "nickname":"PLayer1", "capturedate":"06/12/2022", "capturetime":"10:15PM" }, { "username":"player2", "nickname":"player2", "capturedate":"06/12/2022", "capturetime":"10:00PM" }, { "username":"player2", "nickname":"player2", "capturedate":"06/12/2022", "capturetime":"10:05PM" }]
let res = Object.values(arr.reduce((acc,{username,nickname,...rest})=>{
acc[username] = acc[username] || {username,nickname,entries:[]}
acc[username].entries.push(rest)
return acc
},{}))
console.log(res)
uj5u.com熱心網友回復:
干得好:
let players = [/* ... your data ... */]
let result = [];
players.forEach((player) => {
let existingPlayer = result.find((p) => p.username === player.username);
if (!existingPlayer) {
existingPlayer = {
username: player.username,
nickname: player.nickname,
entries: []
};
result.push(existingPlayer);
}
existingPlayer.entries.push({
capturedate: player.capturedate,
capturetime: player.capturetime
});
});
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490778.html
標籤:javascript
