Tengo esta gran variedad de datos de API que filtro a una cantidad más pequeña. El problema es que el sistema actual que hice usa .map() para establecer una preferencia de orden para esos datos, pero elimina los duplicados. Los datos se filtran por liga deportiva, por lo que si se juegan dos juegos de la misma liga, dos deberían pasar a la matriz final, pero solo uno pasa. La matriz ordenada elimina los duplicados.
const json = (await res.json())?.response; const ordered = desiredOrder.map((id) => json.find(({ league }) => league?.id === id)); const filtered = [...new Set(ordered)].filter(item => item !== undefined)Aquí está la matriz ordenada deseada, a cada liga se le asigna un número y luego las ligas se clasifican de mejor a peor.
var desiredOrder = [ 1, 2, 3, 4, 5, 6, 7, 9, 10, 29, 30, 31, 32, 33, 34, 39, 45, 48, 140, 142, 135, 137, 78, 81, 61, 65, 66, 88, 94, 96, 253, 203, 262, 179, 185, 144, 188, 169, 40, 41, 42, 43, 235, 207, 218, 141, 136, 333, 307, 197, 62, 79, 80, 128, 130, 292, 98, 101, 103, 106, 113, 119, 283, 71, 73, 265, 239, 211, 89, ];Aquí está la salida de la API para que pueda ver de dónde se deriva la identificación (hay más de 100 de estos elementos, esta es la entrada 0)
0: fixture: {id: 710877, referee: 'Anthony Taylor, England', timezone: 'UTC', date: '2022-05-19T18:45:00+00:00', timestamp: 1652985900, …} goals: {home: 3, away: 2} league: {id: 39, name: 'Premier League', country: 'England', logo: 'https://media.api-sports.io/football/leagues/39.png', flag: 'https://media.api-sports.io/flags/gb.svg', …} score: {halftime: {…}, fulltime: {…}, extratime: {…}, penalty: {…}} teams: {home: {…}, away: {…}} [[Prototype]]: ObjectEntonces, usando la salida anterior, necesito hacer que otro juego con id 39 se filtre en la matriz. He intentado muchas cosas para que funcione, pero no funciona.
Si quieres jugar con WebDev --> https://footballify.net/test
Github- https ://github.com/Footballify/Footballify.github.io/tree/main/test
=nn
map no elimina duplicados, Set sí.
Ver MDN :
Los objetos establecidos son colecciones de valores. Puede iterar a través de los elementos de un conjunto en orden de inserción. Un valor en el Conjunto solo puede ocurrir una vez ; es único en la colección del Set.
Si desea permitir duplicados, no use un Set .
También MDN
El método find() devuelve el primer elemento de la matriz proporcionada que satisface la función de prueba proporcionada. Si ningún valor satisface la función de prueba, se devuelve undefined.
Si desea hacer coincidir todos los resultados, utilice filter() en su lugar.
El método filter() crea una nueva matriz con todos los elementos que pasan la prueba implementada por la función proporcionada.
Es posible que desee aplanar la matriz que asigna a ordered