JavaScript递归函数concat不起作用



我有一个嵌套的对象数组,如下所示,我正在尝试将所有值推入单个数组。 所有值都位于sp->it->valuesp->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 对象上的拼写错误。它是对象的数组。

Array.prototype.concat((

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。请改用forEach

这是因为您将val.sp传递给不是数组但它是一个对象的函数,而 .map 是数组的属性

最新更新