[英]javascript recursive function concat not working
我有一个嵌套的对象数组,如下所示,并且我试图将所有值推入单个数组中。 所有值都位于sp->it->value
或sp->it->it->value
[
{
"sp": [
{
"it":[
{"value":5}
]
},
...
],
"b": {
...
}
},
{
"sp": [
{
"it":[
{"nm":5}
]
}
],
"b": {
...
}
},
{
"sp": [
{
"it":[
{
"it":[
{"value":5}
]
}
]
}
],
"b": {
...
}
},
]
这是我尝试过的
const getValues = (js) => {
let values = []
js.map((val,i) => {
if("sp" in val) values.concat(getValues(val.sp))
else if("it" in val) values.concat(getValues(val.it))
else if("value" in val) values.push(val.value)
})
return values
}
我以为我可以串联递归调用的返回值,因为它返回一个数组,但是上面的代码返回空数组。 有什么见解吗?
编辑修复了sp对象上的错字。 它是对象的数组。
这是因为您将val.sp
传递给不是数组的函数,但它是一个对象,而.map是数组的属性
concat()方法用于合并两个或多个数组。 此方法不更改现有数组 ,而是返回一个新数组。
所以这些行什么都不做:
if("sp" in val) values.concat(getValues(val.sp))
else if("it" in val) values.concat(getValues(val.it))
您需要写:
if("sp" in val) values = values.concat(getValues(val.sp))
else if("it" in val) values = values.concat(getValues(val.it))
如果不使用map
则不应使用map
。 使用forEach
代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.