繁体   English   中英

javascript递归函数concat不起作用

[英]javascript recursive function concat not working

我有一个嵌套的对象数组,如下所示,并且我试图将所有值推入单个数组中。 所有值都位于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对象上的错字。 它是对象的数组。

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

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则不应使用map 使用forEach代替。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM