es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Filtra los usuarios por ID único y puntuación más alta.

En primer lugar, intentaré explicar mi problema. Tengo un historial de usuarios (array) y muchos días en este historial (también arrays) y cada día tiene usuarios (objetos) que obtengo de una consulta “get”. Resulta una estructura como esta: [ [ {} ,{},{},{} ], [ {},{},{} ], [ {},{},{} ] ]. Mi objetivo: quiero mostrar los usuarios principales únicos (cada usuario tiene su propio ID único durante todo el historial), ordenando los usuarios por puntaje. Ya tengo la filtración de usuarios principales únicos (por ID) por puntaje (primera imagen) y también tengo la ordenación de usuarios por puntaje (segunda imagen).

Pero no puedo combinar estas dos funciones en una sola lógica. Estaría muy agradecido con alguien que pueda resolverlo.

Primer imagen: filtros de usuarios únicos
Segunda imagen: encuentra el puntaje de usuario más alto de todo el historial
También mi estado Redux

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Combinando funciones de filtrado y ordenación únicas para el historial de usuarios

    Descripción del problema

    El usuario tiene un arreglo con historiales de usuarios, donde cada historial consiste en un arreglo de objetos de usuario para cada día. El usuario desea mostrar una lista de usuarios únicos con las puntuaciones más altas en todos los días. Tiene dos funciones, una que filtra los usuarios únicos y otra que ordena los usuarios por sus puntuaciones. Sin embargo, no puede combinar estas dos funciones en una sola lógica.

    Solución

    Para combinar las dos funciones, podemos primero aplanar el arreglo de historiales de usuarios en un solo arreglo de usuarios utilizando la función flatMap(). Luego, podemos filtrar los usuarios duplicados por su ID único y ordenarlos por su puntuación utilizando la función reduce().

    const allUsers = state.usersHistory.flatMap(day => day); // Aplanar el arreglo
    const uniqueUsers = Array.from(new Set(allUsers.map(user => user.id))) // Obtener usuarios únicos por su ID
      .map(id => allUsers.filter(user => user.id === id).reduce((a, b) => a.score > b.score ? a : b)); // Ordenar por puntuación
    
    // uniqueUsers ahora contiene un arreglo de usuarios únicos ordenados por puntuación
    

    Utilizando flatMap(), podemos convertir el arreglo 2D de historiales de usuarios en un solo arreglo de usuarios. Luego, utilizamos la función map() y Set() para filtrar los usuarios duplicados por su ID. Finalmente, ordenamos los usuarios por su puntuación utilizando la función reduce() y retornamos un arreglo de usuarios únicos ordenados por puntuación.

    Conclusión

    Al combinar las funciones de filtrado y ordenación, pudimos proporcionar una solución al problema del usuario. La solución utilizó flatMap(), map(), Set() y reduce() para producir un arreglo de usuarios únicos ordenados por puntuación.

Comments are closed.