Recibo una matriz de una API que se ve de la siguiente manera:
results = [
{name: 'Ana', country: 'US', language: 'EN'},
{name: 'Paul', country: 'UK', language: 'EN'},
{name: 'Luis', country: 'PH', language: 'SP'},
{name: 'Tom', country: 'US', language: 'EN'}
];
A partir de esto, me gustaría crear una matriz que se vea así:
countries = [
{filter: 'country', value: 'PH'},
{filter: 'country', value: 'UK'},
{filter: 'country', value: 'US'},
];
Con este fin, lo que intenté es:
countries = Array.from([...new Set(this.results.map(item => ({categoryOfFilter: 'country', value: item.country})))]);
Porque me dijeron que usara set. Esto crea una matriz como se especificó anteriormente, pero contiene duplicados. Al igual que:
countries = [
{filter: 'country', value: 'US'},
{filter: 'country', value: 'UK'},
{filter: 'country', value: 'PH'},
{filter: 'country', value: 'US'},
];
Tienen alguna idea? La verdad es que nunca fui bueno con js en primer lugar, así que estoy mucho más allá de estirarme aquí.
2 respuestas
Vea este codepen: https://codepen.io/kyletanders/pen/NWqpWVX?editors= 0012
Algo como esto:
const data = [
{name: 'Ana', country: 'US', language: 'EN'},
{name: 'Paul', country: 'UK', language: 'EN'},
{name: 'Luis', country: 'PH', language: 'SP'},
{name: 'Tom', country: 'US', language: 'EN'}
];
let unique = [...new Set(data.map(item => item.country))].map(x => {return {filter: 'Country', value: x}});
console.log(unique);
El objeto Set le permite almacenar valores únicos de cualquier tipo, ya sea valores primitivos o referencias de objeto .
Los conjuntos no funcionan así con los objetos. Los elementos son todos diferentes, ya que tienen referencias de objetos diferentes, incluso si sus atributos tienen valores iguales.
Funcionará así (dividirlo en dos líneas para que sea un poco legible)
results = [
{name: 'Ana', country: 'US', language: 'EN'},
{name: 'Paul', country: 'UK', language: 'EN'},
{name: 'Luis', country: 'PH', language: 'SP'},
{name: 'Tom', country: 'US', language: 'EN'}
];
// create a set with all country codes. Set works fine with strings
const countryCodes = new Set(results.map(item => item.country));
// spread the set values into a new array and map that to the target objects
const countries = [...countryCodes].map(value => {return {filter: 'country', value}});
console.log(countries);
Preguntas relacionadas
Nuevas preguntas
arrays
Una matriz es una estructura de datos lineal ordenada que consta de una colección de elementos (valores, variables o referencias), cada uno identificado por uno o más índices. Cuando pregunte sobre variantes específicas de matrices, utilice estas etiquetas relacionadas en su lugar: [vector], [lista de matrices], [matriz]. Cuando utilice esta etiqueta, en una pregunta que sea específica de un lenguaje de programación, marque la pregunta con el lenguaje de programación que se está utilizando.