Как создать массив объектов из объекта объектов?

#javascript #arrays #object

Вопрос:

У меня есть такой объект:

   const countriesList = {
  NAC: {
    name: 'NAC'
  },
  LEVANT: {
    name: 'Levant'
  },
  GCC: {
    name: 'Gulf Cooperation Council',
    iso2: 'GC',
    code: '96'
  },
  AF: {
    name: "Afghanistan",
    iso2: "AF",
    code: "93"
  },
  AL: {
    name: "Albania",
    iso2: "AL",
    code: "355"
  },
}
 

Это object , нет array , и это важно. Я хочу создать новый массив, который будет выглядеть так:

 const result = [
  {NAC: 'NAC'},
  {LEVANT: 'Levant'},
  {GCC: 'Gulf Cooperation Council'},
  {AF: "Afghanistan"},
  {AL: "Albania"}
]
 

Я пытался сделать что-то подобное:

 for (let value in countriesList) {
  let temp = {
    value: countriesList[value]['name']
  }
  this.countries.push(temp)
  temp = {}
}
 

Но вместо ключей в массиве объектов я получил value . Как я могу это сделать?

Спасибо за ответы!

Ответ №1:

Ты можешь map кончить Object.entries .

 const countriesList = {
  NAC: {
    name: 'NAC'
  },
  LEVANT: {
    name: 'Levant'
  },
  GCC: {
    name: 'Gulf Cooperation Council',
    iso2: 'GC',
    code: '96'
  },
  AF: {
    name: "Afghanistan",
    iso2: "AF",
    code: "93"
  },
  AL: {
    name: "Albania",
    iso2: "AL",
    code: "355"
  },
}
const res = Object.entries(countriesList).map(([key, {name}])=>({[key]: name}));
console.log(res); 

Ответ №2:

Просто используйте Object.keys , а затем сопоставьте с name объектом:

 Object.keys(countriesList).map(x => ({[x]: countriesList[x].name}))
 

Ответ №3:

Вы можете создать и аналогичный массив объектов со всеми ключами.

 const countryList = Object.entries(countriesList).map((e) => ( { [e[0]]: e[1] } ));
 

Это Вернется Вот Так

 [
{
  NAC: {
    name: 'NAC'
  },
  LEVANT: {
    name: 'Levant'
  },
  GCC: {
    name: 'Gulf Cooperation Council',
    iso2: 'GC',
    code: '96'
  },
  AF: {
    name: "Afghanistan",
    iso2: "AF",
    code: "93"
  },
  AL: {
    name: "Albania",
    iso2: "AL",
    code: "355"
  },
}
]