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