我正在嘗試迭代一個物件陣列,并在一個新陣列中,只回傳玩家,他們的名字以相同的順序排列,并且沒有多次列出。我想我可以做類似的事情或使用 forEach回圈,但我不確定如何處理多次出現
const players = function(outcomes) {
const arr = [];
for (let i = 0; i < outcomes.length; i ) {
if (outcomes.includes(winner, loser))
arr.push(arr[i]);
}
return arr;
};
示例輸入和預期輸出:
const playerNames = [
{ winner: 'Sam', loser: 'Bruce', loser_points: 10 },
{ winner: 'Sam', loser: 'Hakim', loser_points: 9 }]
Output I want: [Sam, Bruce, Hakim]
uj5u.com熱心網友回復:
const playerNames = [
{ winner: 'Sam', loser: 'Bruce', loser_points: 10 },
{ winner: 'Sam', loser: 'Hakim', loser_points: 9 }
];
var getPlayers = function(games) {
var players = {};
var game;
for (var i=0; i<games.length; i ) {
game = games[i];
players[game.winner] = 1;
players[game.loser] = 1;
}
return Object.keys(players);
}
console.log(getPlayers(playerNames));
uj5u.com熱心網友回復:
有多種方法可以實作這一點(請參閱發布的其他解決方案)。以下是您的代碼的修改版本。在您的情況下添加了一些小的更正if。
const playerNames = [{
winner: 'Sam',
loser: 'Bruce',
loser_points: 10
},
{
winner: 'Sam',
loser: 'Hakim',
loser_points: 9
},
{
winner: 'Sam',
loser: 'Paul',
loser_points: 9
}
];
const players = function(outcomes) {
const arr = [];
for (let i = 0; i < outcomes.length; i ) {
// check and push winner
if (!arr.includes(outcomes[i].winner))
arr.push(outcomes[i].winner);
// check and push loser
if (!arr.includes(outcomes[i].loser))
arr.push(outcomes[i].loser);
}
return arr;
};
console.log(players(playerNames));
uj5u.com熱心網友回復:
用于Set生成唯一的資料串列。
const playerNames = [{ winner: 'Sam', loser: 'Bruce', loser_points: 10 },{ winner: 'Sam', loser: 'Hakim', loser_points: 9 }];
const players = Array.from(new Set(playerNames.flatMap((node) => [node.winner, node.loser])));
console.log(players);
uj5u.com熱心網友回復:
我根據 Elaine Alt 更新了我的答案,因為我真的很喜歡他/她的方法!
(但使用 reduce 代替)
const getNames = games => {
return Object.keys(
games.reduce((acc, game) => {
return {
...acc,
[game.winner]: 1,
[game.loser]: 1,
};
}, {})
);
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/414749.html
標籤:
