gpt4 book ai didi

javascript 递归函数 concat 不起作用

转载 作者:行者123 更新时间:2023-12-02 23:03:31 25 4
gpt4 key购买 nike

我有一个如下所示的嵌套对象数组,我试图将所有值插入一个数组中。所有值都位于 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()

The concat() method is used to merge two or more arrays. This method does not change the existing arrays, but instead returns a new array.

所以这些行没有任何作用:

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

关于javascript 递归函数 concat 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57697930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com