Tengo un problema para corregir un error.
Estoy obteniendo datos de la base de datos. los datos (objeto) contienen una matriz de nombres. Tengo un gancho useState que contiene una matriz de objetos. El valor son los nombres. Quiero eliminar todos los objetos del enlace useState tanto como el nombre de la matriz obtenida para la base de datos.
Exp:
response.data.players = ["player1", "player2"] const [names, setNames] = useState([ {value: "player1", label: "player1"}, {value: "player3", label: "player3"}, {value: "player2", label: "player2"}, {value: "player5", label: "player5"}, ])
Quiero que los nombres se vuelvan así:
[ {value: "player3", label: "player3"}, {value: "player5", label: "player5"}, ]
con una complejidad de tiempo mínima (ya estoy usando .map para servir otro enlace con los nombres, si puedo usarlo, será perfecto para la complejidad de tiempo)
Gracias
Eso suena como un filtro para mí. ¿No puedes hacer algo como esto?
setNames(names.filter(name => !response.data.players.includes(name.label)))
Como referencia, esto es lo que funciona sin React:
const names = [{ value: "player1", label: "player1" }, { value: "player3", label: "player3" }, { value: "player2", label: "player2" }, { value: "player5", label: "player5" }, ]; const response = { data: { players: ["player1", "player2"], }, }; const filteredNames = names.filter(name => !response.data.players.includes(name.label)) console.log(filteredNames);
Puede lograr el resultado de manera eficiente usando Establecer y filtrar
const names = [ { value: "player1", label: "player1" }, { value: "player3", label: "player3" }, { value: "player2", label: "player2" }, { value: "player5", label: "player5" }, ]; const players = ["player1", "player2"]; const set = new Set(players); const result = names.filter(({ label }) => !set.has(label)); console.log(result);