javascript - 递归列出嵌套对象键
问题描述
我有一个这样的嵌套对象:
options = {
religous: {
kosher: {
value: 'Kosher',
chosen: false
},
halal: {
value: 'Halal',
active: false
},
},
vegan: {
value: 'Vegan',
active: false
}
}
它包含不同大小的嵌套对象。我想获得一个包含任何属性值的数组value
。因此,对于上述对象,所需的输出将是:
['Kosher', 'Halal', 'Vegan']
顺序并不重要。我试图这样做递归:
getListOfLabels = obj => {
const lst = []
for (let key in obj) {
if (obj[key].value) lst.push(obj[key].value)
else return getListOfLabels(obj[key])
}
return lst
}
但我不断收到RangeError: Maximum call stack size exceeded错误。
有什么建议么?
解决方案
for...in
循环key
分配. 获得使用价值obj[key]
。如果添加到,如果它key
是一个对象,则调用它,并将结果传播到:value
lst
getListOfLabels
lst.push()
const options = {"religous":{"kosher":{"value":"Kosher","chosen":false},"halal":{"value":"Halal","active":false}},"vegan":{"value":"Vegan","active":false}}
const getListOfLabels = obj => {
const lst = []
for (let key in obj) {
const val = obj[key] // get the value
if (key === 'value') lst.push(val) // if the key name is "value" push to lst
else if(typeof val === 'object') lst.push(...getListOfLabels(val)) // if type of value is object, iterate it with getListOfLabels and push the results into lst
}
return lst
}
const result = getListOfLabels(options)
console.log(result)
推荐阅读
- rust - 为什么通过 auto-deref 访问的引用变量会被移动?
- amazon-web-services - 用于确定可用语言的 Amazon Translate API 调用
- html - 如何使用 CSS 删除 div 之间的空间?
- xml - 缺少)在 Odoo QWeb xml 文件中的参数列表之后
- php - 如何从 Laravel 5.6 中的控制器获取数据副类别名称?
- sql - SQL 数据库设计问题:多对一关系与完全分离
- java - 非常简单的 apache CXF - 春季启动 JAX-RS 应用程序
- flutter - onTap 改变所有卡片的颜色,而不仅仅是被点击的那张
- java - Java 8 流 groupingBy 以对象为键的对象字段
- r - 在一个列表R中插入许多csv文件中列的内容