循环嵌套对象javascript
Posted
技术标签:
【中文标题】循环嵌套对象javascript【英文标题】:loop through nested object javascript 【发布时间】:2020-11-30 05:49:51 【问题描述】:我正在尝试遍历以下嵌套对象并获得如下输出:
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方法。map
是一个数组函数。您可以使用Object.keys()
来迭代键,然后通过preference[key]
获取您的排名值。
【参考方案1】:
您可以使用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
没有任何意义,因为你没有将数组映射到任何东西,你忽略了map
的返回值。你可能想要@ 987654328@ 代替,或者像我现在使用的那样,使用 for
循环。)
2021 年更新
现在有一种更简单的方法可以广泛使用,使用Object.fromEntries
,它与Object.entries
正好相反,因此我们可以将整个事情表达为map
ping 操作:
const preferenceRank = Object.fromEntries(
Object.entries(preference).map(([key, rank ]) => [rank, key])
)
【讨论】:
【参考方案2】:您可以使用.entries() 函数来映射对象。
Object.entries(preference).reduce((out, [key, value]) =>
out[value.rank] = key;
return out;
,);
【讨论】:
可以简化为.reduce(out, [key, rank ]) => Object.assign(out, [rank]: key ), )
。【参考方案3】:
使用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);
【讨论】:
【参考方案4】:您可以映射条目并构建一个新对象。
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);
【讨论】:
【参考方案5】:这会起作用。
const preferenceRank = ;
Object.keys(preference).forEach((key) =>
preferenceRank[preference[key]['rank']] = preference[key]['value'];
);
console.log(preferenceRank);
【讨论】:
【参考方案6】:您可以映射键并将排名/键对象添加到结果对象。
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);
【讨论】:
【参考方案7】:map 只适用于数组,你正在处理一个对象,你可以通过使用来遍历对象的键
Object.keys(preference)
这将向您返回数组中的对象键,如下所示 [“种族”,“职业”]
然后您可以根据需要映射并执行代码
【讨论】:
以上是关于循环嵌套对象javascript的主要内容,如果未能解决你的问题,请参考以下文章