javascript递归函数concat不工作
我有一个嵌套的对象数组,如下所示,我正试图将所有的值放入一个数组中。所有值都位于javascript递归函数concat不工作,javascript,Javascript,我有一个嵌套的对象数组,如下所示,我正试图将所有的值放入一个数组中。所有值都位于sp->it->value或sp->it->it->value [ { "sp": [ { "it":[ {"value":5} ] }, ... ], "b": { ... } }, {
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是数组的属性。这是因为您将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
。改用forEach。
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。map
返回一个数组。如果您不打算使用返回值,请使用forEach
@hereticsmonkey,因为它是一个输入错误。修正了你没有修正任何与我评论相关的东西。您仍在使用map
作为副作用,而不是将其作为其返回值。map
返回一个数组。如果您不打算使用返回值,请使用forEach
@hereticsmonkey,因为它是一个输入错误。修正了你没有修正任何与我评论相关的东西。您仍然在使用map
来获得副作用,而不是将其用于返回值。