Tengo una matriz de objetos:
teamScores: [ { teamName: 'Team name 1', points: 21}, { teamName: 'Team name 2', points: 11}, ],Necesito comparar los 'puntos' clave dentro de estos dos objetos y devolver una nueva clave que diga si es el valor más alto. Para este ejemplo, el retorno debe ser:
teamScores: [ { teamName: 'Team name 1', points: 21, isHighest: true}, { teamName: 'Team name 2', points: 11, isHighest: false}, ],Y viceversa:
teamScores: [ { teamName: 'Team name 1', points: 11, isHighest: false}, { teamName: 'Team name 2', points: 21, isHighest: true}, ],Traté de usar .reduce() pero no funcionó tan bien. Aquí está mi intento:
const newTeams = scoreTeams.reduce((acc, team, idx) => { const isHigh = scoreTeams[idx].points > scoreTeams[idx - 1]?.points; const accTeam = { ...team, isHighest: isHigh, }; acc[idx] = accTeam; return acc; }, []);Si el primer objeto tiene un valor más bajo, funciona bien, la salida:
teamScores: [ { teamName: 'Team name 1', points: 11, isHighest: false}, { teamName: 'Team name 2', points: 21, isHighest: true}, ],Pero si el primer valor es mayor que el segundo, no funciona tan bien, la salida:
teamScores: [ { teamName: 'Team name 1', points: 21, isHighest: false}, { teamName: 'Team name 2', points: 11, isHighest: false}, ],Necesito ayuda para comparar estos objetos correctamente, ¡gracias de antemano!
Necesitarías dos iteraciones. Uno para identificar el más alto y otro para establecer la propiedad en cada objeto.
const teamScores = [ { teamName: 'Team name 1', points: 21}, { teamName: 'Team name 2', points: 11}, ]; const maxPoints = Math.max(...teamScores.map(({points}) => points)); const newTeams = teamScores.map(o => ({...o, isHighest: o.points === maxPoints})); console.log(newTeams);Primero encuentre el más alto con Math.max , luego compare los points de cada elemento con el máximo.
var teamScores = [ { teamName: "Team name 1", points: 21 }, { teamName: "Team name 2", points: 11 }, ]; const max = Math.max(...teamScores.map((x) => x.points)); teamScores = teamScores.map((x) => ({...x, isHighest: x.points === max})); console.log(teamScores);map sobre cada objeto para obtener una matriz de todos los puntos.Math.max encuentra el valor más alto de una lista de valores. Debido a que le estamos pasando una matriz, tenemos que spread los valores).isHighest se establece en true o false si el valor de los points del objeto coincide con el valor highest . const scores = [ { teamName: 'Team name 1', points: 21 }, { teamName: 'Team name 2', points: 11 } ]; // Collate the points const points = scores.map(obj => obj.points); // Find the highest point const highest = Math.max(...points); // `spread` out the initial object into a new object // and add the new `isHighest` value const out = scores.map(obj => { return { ...obj, isHighest: obj.points === highest }; }); console.log(out);