Javascript 递归列出嵌套对象键
我有一个嵌套对象:Javascript 递归列出嵌套对象键,javascript,node.js,Javascript,Node.js,我有一个嵌套对象: options = { religous: { kosher: { value: 'Kosher', chosen: false }, halal: { value: 'Halal', active: false }, }, vegan: { value: 'Vegan', active: false }
options = {
religous: {
kosher: {
value: 'Kosher',
chosen: false
},
halal: {
value: 'Halal',
active: false
},
},
vegan: {
value: 'Vegan',
active: false
}
}
它包含大小不同的嵌套对象。我想得到一个数组,其中包含任何值属性的值。因此,对于上述对象,所需输出为:
[‘犹太’、‘清真’、‘纯素’]
秩序并不重要。
我试着递归地这样做:
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:最大调用堆栈大小超过了这个错误
有什么建议吗?for…in循环分配密钥。要获取值,请使用obj[key]。如果键是value add to lst,如果它是一个对象,则对其调用getListOfLabels,并将结果传播到lst.push:
const options={religours:{kosher:{value:kosher,selected:false},halal:{value:halal,active:false},纯素食者:{value:vegan,active:false}
const getListOfLabels=obj=>{
常数lst=[]
用于输入obj中的let键{
const val=obj[key]//获取值
if key==“value”lst.pushval//如果键名为value push to lst
else iftypeof val==='object'lst.push…getListOfLabelsval//如果值的类型是object,则使用getListOfLabels对其进行迭代,并将结果推送到lst
}
返回lst
}
const result=getListOfLabelsoptions
logresult您可以采用递归方法检查对象是否包含值键 函数getValuesobject,键{ 如果输入对象返回[object[key]; 返回Object.valuesobject.reducer,v=>{ 如果v&&typeof v==='object'r.push…getValuesv,键; 返回r; }, []; } var options={religours:{kosher:{value:'kosher',selected:false},halal:{value:'halal',active:false},vegan:{value:'vegan',active:false};
console.loggetValuesoptions“value” 这里有一个使用reduce:-D的简洁方法
const getValues = options => Object.values(options)
.reduce((acc, optionObj) => (
optionObj.value ? [ ...acc, optionObj.value ] : [
...acc,
...Object.values(optionObj).reduce((arr, { value }) => ([ ...arr, value ]), [])
]), [])