Estoy tratando de iterar sobre una matriz de objetos, y en una nueva matriz, devolver solo los jugadores, sus nombres en el mismo orden y no enumerados más de una vez. Estaba pensando que podría hacer algo similar a esto o con un forEach bucle pero no estoy muy seguro de cómo abordar las múltiples ocurrencias
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; };Entrada de ejemplo y salida esperada:
const playerNames = [ { winner: 'Sam', loser: 'Bruce', loser_points: 10 }, { winner: 'Sam', loser: 'Hakim', loser_points: 9 }] Output I want: [Sam, Bruce, Hakim]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));Use Set para generar una lista única de datos.
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);Hay varias formas de lograr esto (consulte otras soluciones publicadas). A continuación se muestra una versión modificada de su código. Se agregaron algunas correcciones menores en su condición 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));