• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

102
Vistas
Compara dos conjuntos de puntuaciones de jugadores para ver quién ha subido o bajado en la lista.

Tengo dos matrices que se toman en diferentes períodos de tiempo. ¿Cómo verificar qué jugador ha subido/bajado en la lista con la inclusión de marcar un nuevo jugador también como subiendo?

PD: las matrices ya están ordenadas según la puntuación.

 pastData:[ { playerName:'John Doe', score:50 }, { playerName:'Jane Doe', score:40 }, { playerName:'John Appleseed', score:30 }, { playerName:'John Walker', score:20 }, ] presentData:[ { playerName:'Jane Doe', score:80 }, { playerName:'John Doe', score:60 }, { playerName:'John Appleseed', score:40 }, { playerName:'John Mayer', score:30 }, ]

Necesito verificar los cambios de índice comparando las dos matrices y obtener un resultado como el siguiente.

 presentData:[ { playerName:'Jane Doe', score:80, position:'up' }, { playerName:'John Doe', score:60, position:'down' }, { playerName:'John Appleseed', score:40, position:'same' }, { playerName:'John Mayer', score:30, position:'up' }, ]

Estoy intentando lo siguiente, pero parece que no puedo encontrar una solución para el caso de uso del nuevo jugador.

 let status=[] //this array will include the changes which I can use later to update the presentData array with a "position:'up/down/same'" key-value pairs. for (let i = 0; i < 4; i++) { for(let j=0; j<4; j++) { if(Object.values(pastData)[i].id==Object.values(presentData)[j].id){ if(i==j){ status.push('same') } if(i<j){ status.push('down') } if(i>j){ status.push('up') } } } }
about 3 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

  1. Cree un mapa a partir de la matriz pastData que asigna el nombre del playerName a su index .

  2. Iterar sobre la matriz presentData y usar el mapa para calcular la posición de cada jugador.

 const pastData = [ { playerName: "John Doe", score: 50 }, { playerName: "Jane Doe", score: 40 }, { playerName: "John Appleseed", score: 30 }, { playerName: "John Walker", score: 20 }, ]; const presentData = [ { playerName: "Jane Doe", score: 80 }, { playerName: "John Doe", score: 60 }, { playerName: "John Appleseed", score: 40 }, { playerName: "John Mayer", score: 30 }, ]; const pastDataMap = new Map(pastData.map((d, i) => [d.playerName, i])); const status = presentData.map((d, i) => { const pastIndex = pastDataMap.get(d.playerName); return { ...d, position: pastIndex === undefined || i < pastIndex ? "up" : i > pastIndex ? "down" : "same", }; }); console.log(status);

Otra documentación relevante:

  • Difundir sintaxis (...)
  • matriz.prototipo.mapa
about 3 years ago · Juan Pablo Isaza Denunciar

0

Puede crear un pastDataScoreHash con Array.prototype.reduce() y crear una matriz de result con Array.prototype.map() agregando la propiedad de position a cada jugador y obteniendo su valor comparando el score pasado de pastDataScoreHash con el score actual

Código:

 const pastData = [ { playerName: 'John Doe', score: 50 }, { playerName: 'Jane Doe', score: 40 }, { playerName: 'John Appleseed', score: 30 }, { playerName: 'John Walker', score: 20 }, ] const presentData = [ { playerName: 'Jane Doe', score: 80 }, { playerName: 'John Doe', score: 60 }, { playerName: 'John Appleseed', score: 40 }, { playerName: 'John Mayer', score: 30 }, ] const pastDataHash = pastData.reduce((a, { playerName: p }, i) => ((a[p] = i), a), {}) const getPosition = (past, current) => { switch (true) { case past == current: return 'same' case past == undefined || past > current: return 'up' default: return 'down' } } const result = presentData.map((p, i) => ({ ...p, position: getPosition(pastDataHash[p.playerName], i), })) console.log(result)
 https://stackoverflow.com/questions/72401269/compare-two-arrays-of-player-scores-to-see-who-has-gone-up-down-in-the-list#

about 3 years ago · Juan Pablo Isaza Denunciar

0

Esta es una solución aproximadamente x4 más rápida que la primera.

 presentData.map((present,index)=> { const pastIndexPostion = pastData.findIndex(t => t.playerName === present.playerName) if(pastIndexPostion > index || pastIndexPostion===-1){ present.position = 'up' }else if(pastIndexPostion === index){ present.position = 'same' }else { present.position = 'down' } return present })
about 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda