Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript递归函数concat不工作_Javascript - Fatal编程技术网

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
来获得副作用,而不是将其用于返回值。