tengo un objeto como este
const countries = { iran: { capital : 'Tehran', population : '83183741', area : '1648195' }, uk: { capital : 'London', population : '6708100', area : '242495' }, us: { capital : 'Washington DC', population : '332641717', area : '9525067' }, ukraine: { capital : 'Kyiv', population : '44983019', area : '603500' } };¿Cómo puedo obtener una salida como esta?
iran,capital,Tehran iran,population,83183741 iran,area,1648195 uk,capital,Tehran uk,population,6708100 uk,area,242495 .... ukrane,capital,603500 ukrane,population,41130432 ukrane,area,603500 const countries = { iran: { capital : 'Tehran', population : '83183741', area : '1648195' }, uk: { capital : 'London', population : '6708100', area : '242495' }, us: { capital : 'Washington DC', population : '332641717', area : '9525067' }, ukrane: { capital : 'Kiev', population : '41130432 ', area : '603500' } }; var i = 1; for (const country in countries) { console.log(country); for (let x in country) { console.log(country[x]) } i++ }Estabas cerca. Lo único que te has perdido es que un bucle for..in te da la clave , no el valor. Entonces, debe acceder a la clave dada en el objeto de esta manera:
const countries = { iran: { capital : 'Tehran', population : '83183741', area : '1648195' }, uk: { capital : 'London', population : '6708100', area : '242495' }, us: { capital : 'Washington DC', population : '332641717', area : '9525067' }, ukrane: { capital : 'Kiev', population : '41130432 ', area : '603500' } }; for (const country in countries) { console.log(country); for (const property in countries[country]) { console.log(countries[country][property]) } }A partir de ahí, puede concatenar fácilmente la información que necesita:
const countries = { iran: { capital : 'Tehran', population : '83183741', area : '1648195' }, uk: { capital : 'London', population : '6708100', area : '242495' }, us: { capital : 'Washington DC', population : '332641717', area : '9525067' }, ukrane: { capital : 'Kiev', population : '41130432 ', area : '603500' } }; for (const country in countries) { for (const property in countries[country]) { console.log(`${country},${property},${countries[country][property]}`) } } Tenga en cuenta que for..in también itera a través de la clave en los prototipos, por lo que debe realizar comprobaciones adicionales para evitar esto. En su lugar, recomiendo usar un bucle for..of con Object.keys() u Object.entries() :
const countries = { iran: { capital : 'Tehran', population : '83183741', area : '1648195' }, uk: { capital : 'London', population : '6708100', area : '242495' }, us: { capital : 'Washington DC', population : '332641717', area : '9525067' }, ukrane: { capital : 'Kiev', population : '41130432 ', area : '603500' } }; for (const country of Object.keys(countries)) { for (const property of Object.keys(countries[country])) { console.log(`${country},${property},${countries[country][property]}`) } }esta puede ser la forma básica:
//here we loop to get the countries for (let country in countries) { // this will be the index (iran , uk , us , ukrane) //here we loop into the data of each country for(let data in countries[country]){ //and we print the result easy as this: console.log(country + " , " + data + " , " +countries[country][data]); } }Usando Object.entries anidadas
const countries = { iran: { capital: "Tehran", population: "83183741", area: "1648195", }, uk: { capital: "London", population: "6708100", area: "242495", }, us: { capital: "Washington DC", population: "332641717", area: "9525067", }, ukraine: { capital: "Kyiv", population: "44983019", area: "603500", }, }; Object.entries(countries).forEach(([country, obj]) => Object.entries(obj).forEach(([key, value]) => console.log([country, key, value].join()) ) );