#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"
},
}
]