如何在javascript中创建递归嵌套数组?

如何在javascript中创建递归嵌套数组?,javascript,arrays,recursion,Javascript,Arrays,Recursion,以下是我拥有的json: { "name": "test", "characteristics": [ { "name": "A", "description": "", "comprisedOf": [ { "name": "A1", "description": "",

以下是我拥有的json:

{
    "name": "test",
    "characteristics": [
        {
            "name": "A",
            "description": "",
            "comprisedOf": [
                {
                    "name": "A1",
                    "description": "",
                    "comprisedOf": [
                        {
                            "name": "A1.1",
                            "description": "",
                            "value": "10"
                        },
                        {
                            "name": "A1.2",
                            "description": "",
                            "value": "5"
                        }
                    ]
                },
                {
                    "name": "A2",
                    "description": "",
                    "value": "100"
                },
                {
                    "name": "A3",
                    "description": "",
                    "value": "20"
                },
                {
                    "name": "A4",
                    "description": "",
                    "value": "50"
                }
            ]
        },
        {
            "name": "B",
            "description": "",
            "value": "10"
        }
    ]
}
这里我有两个“test”对象的特征-A和B。这两个对象可能有也可能没有“comprisedOf”数组。例如,A有“comprisedOf”数组,而B没有。这些comprisedOf数组还可能包含或不包含comprisedOf对象数组

现在,我必须用它制作一个数组,它应该像下面给出的数组一样:-

[
    {
        "name": "test",
        "children": [
            {
                "name": "A",
                "children": [
                    {
                        "name":"A1",
                        "children:: [
                            {
                                "name":  "A1.1"
                            },
                            {
                                "name": "A1.2"
                            }
                        ]
                    },
                    {
                        "name": "A2"
                    },
                    {
                        "name": "A3"
                    },
                    {
                        "name": "A4"
                    }
                ]
            },
            {
                "name": "B"
            }
        ]
    }
]
如何从第一个数组递归地形成这个数组

非常感谢

编辑:-以下是我尝试过的:-

var makeChildrenAll = function(dataChar){
    dataChar.forEach(function(char){
        if(char.comprisedOf) {
            makeChildrenAll(char.comprisedOf);                                
        }
        childrenData.push({
            name: char.name,
            description: char.description,
           children: childrenData
        });
    });
};
makeChildrenAll(dataChar);

为了实现递归,您希望函数返回并能够将该返回分配给当前对象

差不多

函数映射项(arr){
//返回新数组
返回arr.reduce((a,c)=>{
var newObj={name:c.name};
if(Array.isArray(c.comprisedOf)){
//使用递归函数的返回数组分配给'children'属性
newObj.children=mapItems(c.comprisedOf)
}
返回a.concat(newObj)
},[])
}
console.log(mapItems(data.characteristics))
。作为控制台包装{最大高度:100%!重要;}

var数据={
“名称”:“测试”,
“特点”:[
{
“姓名”:“A”,
“说明”:“,
“comprisedOf”:[
{
“名称”:“A1”,
“说明”:“,
“comprisedOf”:[
{
“名称”:“A1.1”,
“说明”:“,
“值”:“10”
},
{
“名称”:“A1.2”,
“说明”:“,
“值”:“5”
}
]
},
{
“名称”:“A2”,
“说明”:“,
“值”:“100”
},
{
“名称”:“A3”,
“说明”:“,
“值”:“20”
},
{
“名称”:“A4”,
“说明”:“,
“值”:“50”
}
]
},
{
“名称”:“B”,
“说明”:“,
“值”:“10”
}
]
}

您可以采用不同的起始数组,并对所需属性使用解构

函数映射项(数组){
返回array.map({name,comprisedOf})=>
赋值({name},comprisedOf&&{children:mapItems(comprisedOf)});
}
变量数据={name:“test”,特征:[{name:“A”,描述:”,comprisedOf:[{name:“A1”,描述:”,comprisedOf:[{name:“A1.1”,描述:”,值:“10”},{name:“A1.2”,描述:”,值:“5”},{name:“A2”,描述:”,值:“100”},{name:“A3”,描述:,值:“20”},{name:“A4”,description:,value:“50”},{name:“B”,description:,value:“10”}]};
log(mapItems([{name:data.name,comprisedOf:data.characteristics}])

。作为控制台包装{max height:100%!important;top:0;}
请显示您尝试过的内容。Stackoverflow不是免费的代码编写服务。这里的目标是让人们在代码无法正常工作时帮助您修复代码expected@charlietfl编辑了我的答案。这里没有所谓的“JSON对象”-JSON总是一个字符串。还有其他方法解决这个问题吗?在我的方法中,我已经多次使用递归,但我不能在这里使用它。我不确定它能比我在这里做的简单多少。可以使用
map()
而不是
reduce()
我猜很遗憾,map和reduce函数在我的js版本中不起作用。你能修改它吗?如果
forEach
不起作用,则
map()
reduce()
不起作用。你在什么环境下工作?这是一个内部js框架,给了我reduce函数中的语法错误。“意外令牌>”