Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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重新计算深度嵌套的数组元素数_Javascript - Fatal编程技术网

javascript重新计算深度嵌套的数组元素数

javascript重新计算深度嵌套的数组元素数,javascript,Javascript,我得到了以下数组: let data = [ {"title": {number: 1}, "children": [ {"title": {number: 1.1}}, {"title": {number: 1.2}}, {"title": {number: 1.3}}, {"title": {number: 1.4}},

我得到了以下数组:

let data =  [
        {"title": {number: 1},
            "children": [
                {"title": {number: 1.1}},
                {"title": {number: 1.2}},
                {"title": {number: 1.3}},
                {"title": {number: 1.4}},
                {"title": {number: 1.5}}
            ]
        },
        {"title": {number: 2},
            "children": [
                {"title":{number: 2.1}},
                {"title":{number: 2.2},
                    "children": [
                        {"title":{number: 2.2.1}},
                        {"title":{number: 2.2.2}},
                        {"title":{number: 2.2.3}},
                        {"title":{number: 2.2.4}} 
                    ]
                },
                {"title":{number: 2.3}},
                {"title":{number: 2.4}}
            ]
        },
        {"title": {number: 3},
            "children": []
        }
    ];

此数组的每个元素都可以更改其位置,可以添加新元素,也可以删除现有元素。任务是重新计算元素编号,以保持其正确顺序。例如,如果删除编号为
2.2.2
的元素,则其他元素将变为
2.2.1
2.2.2
2.2.3
。如果某个元素及其子元素被删除,则所有其他元素的数字也应重新计算。任何关于如何做到这一点的想法都是受欢迎的。谢谢

您可以创建递归函数,每次对象结构更改时都将调用该函数,以重新计算树中每个元素的位置

函数recalc(数据,prev=''){
data.forEach((e,i)=>{
让点=上一个?':';
设数字=上一个+点+(i+1);
如果(如儿童){
recalc(如儿童、数字)
}
如果(如标题){
e、 title.number=编号
}
})
}
1.1.1.1.1.1.1.1.1.1缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约缔约2.2.2“}},{“标题”:{“编号”:“2.2.3”},{“标题”:{“数字”:“2.2.4”}]},{“标题”:{“数字”:2.3},{“标题”:{“数字”:2.4}]},{“标题”:{“数字”:3},“儿童”:[]}]
recalc(数据1);
console.log(数据1)
1.1.1},,,{“标题”1.1},儿童:,,,,{“标题”1.1},,,{“标题”1.1},,{“标题”1.2},,{“标题”2.2},,{“标题”2.5},,{“标题”下列下列下列下列下列下列“““{“号码”号码:1.1”1},”儿童,儿童:,,,,{“标题:{“标题:{“标题:{“标题:{“标题:{”1.1.1.1.1.1.1.1.1.1.1.1.1.1.1”1},”2},”2},,,,,,,,,,,,,,,,,,,”儿童:,,,,,,,,,,,,{“儿童:{“儿童:{“标题:“““““““““““““““““““““““““““{“编号”:2.4}}]},{“标题”:{”编号:3},“子项”:[{title:{},子项:[{title:{},{title:{}]}]
recalc(数据2);

console.log(data2)
为什么有数字。它们很容易从层次结构中计算出来。有什么办法可以从层次结构中找到它们吗?据我所知,我需要递归地跟踪嵌套级别,并为相关元素添加增量……你检查过了吗?是的,你需要递归。但是正如你所看到的
数据[0].title
是第一个标题,
data[1]title
是第二个。
data[1]。children[0]
是2.1等