tengo una pregunta acerca de cómo un número también se asoció con un literal de cadena.
Mi programa presenta una lista de anotadores en mi objeto de juego, como puede ver aquí.
const game = { team1: 'Bayern Munich', team2: 'Borrussia Dortmund', players: [ [ 'Neuer', 'Pavard', 'Martinez', 'Alaba', 'Davies', 'Kimmich', 'Goretzka', 'Coman', 'Muller', 'Gnarby', 'Lewandowski', ], [ 'Burki', 'Schulz', 'Hummels', 'Akanji', 'Hakimi', 'Weigl', 'Witsel', 'Hazard', 'Brandt', 'Sancho', 'Gotze', ], ], score: '4:0', scored: ['Lewandowski', 'Gnarby', 'Lewandowski', 'Hummels'], date: 'Nov 9th, 2037', odds: { team1: 1.33, x: 3.25, team2: 6.5, }, }; let count0 = 0; let count1 = 0; let count2 = 0; for (let i = 0; i < playerScored.length; i++) { if ( playerScored[i] === 'Lewandowski' ) { count0 += 1; } else if ( playerScored[i] === 'Gnarby') { count1 += 1; } else if ( playerScored[i] === 'Hummels') { count2 += 1; } } const scorers = {}; for (const player of game.scored) { scorers[player] ? scorers[player]++ : (scorers[player] = 1); } console.log(scorers);Mi pregunta es, en esta línea particular de código en el programa
const scorers = {}; for (const player of game.scored) { scorers[player] ? scorers[player]++ : (scorers[player] = 1); } console.log(scorers);¿Cómo mostró el programa el número y el nombre del jugador que anotó? Entiendo cómo se pone el nombre del jugador en el objeto vacío. Gracias.
La línea
scorers[player] ? scorers[player]++ : (scorers[player] = 1);es equivalente a
if (scorers[player]) { scorers[player]++; } else { scorers[player] = 1; } La condición if comprueba si el nombre ya está en el objeto. Si es así, usa ++ para agregar 1 al conteo. Si el nombre aún no está en el objeto, se crea con la asignación en el bloque else y se le asigna un recuento inicial de 1 .
El objeto goleadores es algo como esto:
scorers = { pique: 1, messi: 3, henry: 11 }; cuando haces scorers[player]++ por ejemplo scorers['pique']++ Agrega uno a los valores de pique. y tu objeto se convertirá
scorers = { pique: 2, messi: 3, henry: 11 }; y cuando haces scorers[player] = 1 en tu código, de hecho estás agregando una nueva propiedad al objeto goleadores. por ejemplo, después de scorers['xavi'] = 1 su objeto se convierte en:
scorers = { pique: 2, messi: 3, henry: 11, xavi: 1 };Tu game.scored se ve así:
const game = { scored: ['Lewandowski', 'Gnarby', 'Lewandowski', 'Hummels'] }Cuando ejecutas el siguiente código:
const scorers = {}; for (const player of game.scored) { scorers[player] ? scorers[player]++ : (scorers[player] = 1); } console.log(scorers); ['Lewandowski', 'Gnarby', 'Lewandowski', 'Hummels'] y verificará si hay scorers[player] . Si existe, simplemente lo incrementa en 1, de lo contrario, lo establece en 1.
Por lo tanto, después de que termine su bucle y lo console.log , los scorers tendrán 'Lewandowski', 'Gnarby', 'Hummels' como sus claves.
Estoy confundido con la forma en que tiene el nombre y el número en la misma línea, supongo que agregar el ++ también agrega el valor de la cadena con el valor del número
Básicamente estás creando un objeto que se parece a esto:
scorers = { Lewandowski: 2, Gnarby: 1, Hummels: 1 } Tal vez sea más fácil de entender si imprime el valor de los scorers en cada ciclo.
const game = { scored: ['Lewandowski', 'Gnarby', 'Lewandowski', 'Hummels'] } const scorers = {}; for (const player of game.scored) { scorers[player] ? scorers[player]++ : (scorers[player] = 1); console.log(scorers); }