循环嵌套对象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 正好相反,因此我们可以将整个事情表达为mapping 操作:

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的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 循环遍历嵌套的 Javascript 对象

跳出 javascript 嵌套的 async.each 循环,但继续主循环

打破 JavaScript 中嵌套循环的最佳方法是啥?

使用JavaScript循环嵌套解决各种图形

Javascript递归导致循环结构

理解 javascript 嵌套 for 循环的问题 [关闭]