遍历嵌套对象 javascript
loop through nested object javascript
我正在尝试循环访问以下嵌套对象并获得如下输出:
const preference = {
"ethnicity": {
"value": "Gurung",
"rank": 1
},
"occupation": {
"value": "Banker",
"rank": 2
}
}
我试过以下方法:
let preferenceRank = {};
preference.map(pref => {
preferenceRank[pref.rank] = pref;
});
console.log(preferenceRank);
我收到这个错误:
"TypeError: preference.map is not a function"...
需要的输出:
{
1: "ethnicity",
2: "occupation",
}
map 仅适用于数组,您正在处理一个对象,您可以使用
遍历对象的键
Object.keys(preference)
这将 return 给你数组中的对象键,如下所示
[“种族”,“职业”]
然后你可以根据需要映射它并编写你的代码
您可以使用 Object.entries
一次获取键和值(作为数组的数组 [key, value]
):
const preference = {
"ethnicity": {
"value": "Gurung",
"rank": 1
},
"occupation": {
"value": "Banker",
"rank": 2
}
}
const preferenceRank = {}
for (const [key, { rank }] of Object.entries(preference)) {
preferenceRank[rank] = key
}
console.log(preferenceRank)
(顺便说一句,在你的代码中使用 map
没有任何意义,因为你没有将数组映射到任何东西,并且你忽略了 return 的值map
。您可能想要 forEach
,或者像我现在使用的那样,一个 for
循环。)
2021 年更新
现在有一种广泛使用的更简单的方法,使用 Object.fromEntries
,它与 Object.entries
相反,从而允许我们将整个事情表达为 map
ping 操作:
const preferenceRank = Object.fromEntries(
Object.entries(preference).map(([key, { rank }]) => [rank, key])
)
这会起作用。
const preferenceRank = {};
Object.keys(preference).forEach((key) => {
preferenceRank[preference[key]['rank']] = preference[key]['value'];
});
console.log(preferenceRank);
您可以使用 .entries() 函数映射对象。
Object.entries(preference).reduce((out, [key, value]) => {
out[value.rank] = key;
return out;
},{});
使用Object.entries()
获取对象的键值数组。然后你可以遍历它。
如果循环是为了副作用而不是使用回调函数返回的值,则使用 forEach
。
const preference = {
"ethnicity": {
"value": "Gurung",
"rank": 1
},
"occupation": {
"value": "Banker",
"rank": 2
}
}
let preferenceRank = {};
Object.entries(preference).forEach(([pref, {rank}]) => {
preferenceRank[rank] = pref;
});
console.log(preferenceRank);
您可以映射条目并构建新对象。
const
preference = { ethnicity: { value: "Gurung", rank: 1 }, occupation: { value: "Banker", rank: 2 } },
result = Object.fromEntries(Object
.entries(preference)
.map(([k, { rank }]) => [rank, k])
);
console.log(result);
您可以映射键并添加到 result-object rank/key-objects。
const preference = {
"ethnicity": {
"value": "Gurung",
"rank": 1
},
"occupation": {
"value": "Banker",
"rank": 2
}
}
let res= {};
Object.keys(preference).map((el,key) => {
res[preference[el].rank] = el;
});
console.log(res);
我正在尝试循环访问以下嵌套对象并获得如下输出:
const preference = {
"ethnicity": {
"value": "Gurung",
"rank": 1
},
"occupation": {
"value": "Banker",
"rank": 2
}
}
我试过以下方法:
let preferenceRank = {};
preference.map(pref => {
preferenceRank[pref.rank] = pref;
});
console.log(preferenceRank);
我收到这个错误:
"TypeError: preference.map is not a function"...
需要的输出:
{
1: "ethnicity",
2: "occupation",
}
map 仅适用于数组,您正在处理一个对象,您可以使用
遍历对象的键Object.keys(preference)
这将 return 给你数组中的对象键,如下所示 [“种族”,“职业”]
然后你可以根据需要映射它并编写你的代码
您可以使用 Object.entries
一次获取键和值(作为数组的数组 [key, value]
):
const preference = {
"ethnicity": {
"value": "Gurung",
"rank": 1
},
"occupation": {
"value": "Banker",
"rank": 2
}
}
const preferenceRank = {}
for (const [key, { rank }] of Object.entries(preference)) {
preferenceRank[rank] = key
}
console.log(preferenceRank)
(顺便说一句,在你的代码中使用 map
没有任何意义,因为你没有将数组映射到任何东西,并且你忽略了 return 的值map
。您可能想要 forEach
,或者像我现在使用的那样,一个 for
循环。)
2021 年更新
现在有一种广泛使用的更简单的方法,使用 Object.fromEntries
,它与 Object.entries
相反,从而允许我们将整个事情表达为 map
ping 操作:
const preferenceRank = Object.fromEntries(
Object.entries(preference).map(([key, { rank }]) => [rank, key])
)
这会起作用。
const preferenceRank = {};
Object.keys(preference).forEach((key) => {
preferenceRank[preference[key]['rank']] = preference[key]['value'];
});
console.log(preferenceRank);
您可以使用 .entries() 函数映射对象。
Object.entries(preference).reduce((out, [key, value]) => {
out[value.rank] = key;
return out;
},{});
使用Object.entries()
获取对象的键值数组。然后你可以遍历它。
如果循环是为了副作用而不是使用回调函数返回的值,则使用 forEach
。
const preference = {
"ethnicity": {
"value": "Gurung",
"rank": 1
},
"occupation": {
"value": "Banker",
"rank": 2
}
}
let preferenceRank = {};
Object.entries(preference).forEach(([pref, {rank}]) => {
preferenceRank[rank] = pref;
});
console.log(preferenceRank);
您可以映射条目并构建新对象。
const
preference = { ethnicity: { value: "Gurung", rank: 1 }, occupation: { value: "Banker", rank: 2 } },
result = Object.fromEntries(Object
.entries(preference)
.map(([k, { rank }]) => [rank, k])
);
console.log(result);
您可以映射键并添加到 result-object rank/key-objects。
const preference = {
"ethnicity": {
"value": "Gurung",
"rank": 1
},
"occupation": {
"value": "Banker",
"rank": 2
}
}
let res= {};
Object.keys(preference).map((el,key) => {
res[preference[el].rank] = el;
});
console.log(res);