Estoy tratando de convertir un JSON (una lista de países/ciudades del mundo) en una matriz, y lo que intento hacer con la matriz es:
Pude lograr esto gracias a esta función ( solo para aclarar : en el proyecto final, fetchData se importa de otro archivo y la declaración de variables y la matriz están en un document.addEventListener("DOMContentLoaded", async () => {} , este es solo uno con fines de prueba)
async function fetchData(url) { const response = await fetch(url); return await response.json(); } (async () => { let worldCities = await fetchData( "https://pkgstore.datahub.io/core/world-cities/world-cities_json/data/5b3dd46ad10990bca47b04b4739a02ba/world-cities_json.json" ); const countries = [...new Set(worldCities.map((item) => item.country))]; console.log(countries); })(); .as-console-wrapper { max-height: 100% !important; top: 0; }Con fetchData, solicito un recurso de forma asíncrona (la URL del archivo .json), luego mapeo una matriz con el archivo y lo "filtro" como mencioné anteriormente
Pero el problema es que funciona, pero no como se necesita, porque la salida debería ser así
y mi salida es solo una matriz de nombres de países
Sé que estoy mapeando (solo) el valor actual requerido con worldCities.map((item) => item.country) y eliminando valores repetidos con [...new Set()]
Pero, ¿cómo podría hacer que la matriz devuelva un objeto como pares clave/valor [country: 'country1', country: 'country2', ...] (o algo similar a la salida de la imagen) en lugar de la matriz normal ['country1', 'country2', ...] ?
Cualquier ayuda es bienvenida, muchas gracias!
map() de nuevo:
const countries = [...new Set(worldCities.map((item) => item.country))].map(country => ({ country }))Solución de trabajo:
async function fetchData(url) { const response = await fetch(url); return await response.json(); } (async () => { let worldCities = await fetchData( "https://pkgstore.datahub.io/core/world-cities/world-cities_json/data/5b3dd46ad10990bca47b04b4739a02ba/world-cities_json.json" ); const countries = [...new Set(worldCities.map((item) => item.country))].map(country => ({ country })) console.log(countries); })(); .as-console-wrapper { max-height: 100% !important; top: 0; }Al darle el enfoque a continuación, puede lograr obtener una variedad de nombres de países únicos. Si desea una matriz de objetos de país, puede convertir la matriz de nombres.
$.get('https://pkgstore.datahub.io/core/world-cities/world-cities_json/data/5b3dd46ad10990bca47b04b4739a02ba/world-cities_json.json', function(data) { var res = JSON.parse(data) var countries = res.map(function(elem){return elem.country}); const uniques = Array.from(new Set(countries)); console.log(uniques) });