Azi*_*ima 1 javascript nested-object
我正在尝试遍历以下嵌套对象并获得如下输出:
const preference = {
"ethnicity": {
"value": "Gurung",
"rank": 1
},
"occupation": {
"value": "Banker",
"rank": 2
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下操作:
let preferenceRank = {};
preference.map(pref => {
preferenceRank[pref.rank] = pref;
});
console.log(preferenceRank);
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
"TypeError: preference.map is not a function"...
Run Code Online (Sandbox Code Playgroud)
所需输出:
{
1: "ethnicity",
2: "occupation",
}
Run Code Online (Sandbox Code Playgroud)
您可以使用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)Run Code Online (Sandbox Code Playgroud)
(顺便说一句,在你的代码中使用它没有任何意义map,因为你没有将数组映射到任何东西,并且你忽略了 的返回值map。你可能想要forEach代替,或者像我现在使用的那样,一个for循环.)
现在有一种更简单的方法可以广泛使用,使用Object.fromEntries,它与 做相反的Object.entries事情,从而允许我们将整个事情表达为mapping 操作:
const preferenceRank = Object.fromEntries(
Object.entries(preference).map(([key, { rank }]) => [rank, key])
)
Run Code Online (Sandbox Code Playgroud)
您可以使用.entries()函数来映射对象。
Object.entries(preference).reduce((out, [key, value]) => {
out[value.rank] = key;
return out;
},{});
Run Code Online (Sandbox Code Playgroud)
用于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);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1389 次 |
| 最近记录: |