Me gustaría explicar mi problema del día.
actualmente tengo una matriz de objetos
Mapeo esta tabla
[ { id: "a", location: "FR", zone: "EU" } , { id: "b", location: "FR", zone: "EU" } , { id: "c", location: "ES", zone: "EU" } , { id: "d", location: "ES", zone: "EU" } , ]para ordenar todos los datos utilizo un useEffect para recuperar solo los valores que necesito
useEffect(() => { if (data) { const location = data.map((e) => { return { label: e.location, }; }); setLocations(locations); } }, [data]);esto funciona correctamente.
excepto que me devuelve el siguiente formato
0: {label: 'FR'} 1: {label: 'FR'} 2: {label: 'ES'} 4: {label: 'ES'}y me gustaria tener el siguiente formato
0: {label: 'FR'} 1: {label: 'ES'}básicamente elimina la clave idéntica
estoy abierto a cualquier propuesta muchas gracias.
Dado que está utilizando location como una propiedad similar a una identificación que determina la singularidad, puede hacer lo siguiente:
const data = [ { id: "a", location: "FR", zone: "EU" } , { id: "b", location: "FR", zone: "EU" } , { id: "c", location: "ES", zone: "EU" } , { id: "d", location: "ES", zone: "EU" } , ]; console.log( Array .from(new Set(data.map(d => d.location))) .map(label => ({ label })) ) Esto primero transforma la lista en una matriz de cadenas. Utiliza un Set para deshacerse de cadenas duplicadas. Luego, se transforma al formato de salida deseado.
data.map(d => d.location) da [ "FR", "FR", "ES", "ES" ]Array.from(new Set(...)) da [ "FR", "ES" ](...).map(label => ({ label })) da el resultado finalusar filtro e indexOf
data = data.filter(function (value, index, array) { return array.indexOf(value) === index; });