gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:15:13 26 4
gpt4 key购买 nike

我得到了以下数组:

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.12.2.22.2 .3。如果某个元素及其子元素被删除,则所有其他元素的数字也应该重新计算。任何如何做到这一点的想法都将受到欢迎。谢谢

最佳答案

您可以创建递归函数,每次对象结构发生变化时都会调用该函数,以重新计算树中每个元素的位置。

function recalc(data, prev = '') {
data.forEach((e, i) => {
let dot = prev ? '.' : '';
let number = prev + dot + (i + 1);

if (e.children) {
recalc(e.children, number)
}

if (e.title) {
e.title.number = number
}
})
}

const data1 = [{"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":[]}]
recalc(data1);
console.log(data1)

const data2 = [{"title":{"number":1},"children":[{"title":{"number":1.1}},{"title":{"number":1.2}},{"title":{"number":1.5}}]},{"title":{"number":2},"children":[{"title":{"number":2.1}},{"title":{"number":2.2},"children":[{"title":{"number":"2.2.3"}},{"title":{"number":"2.2.4"}}]},{"title":{"number":2.3}},{"title":{"number":2.4}}]},{"title":{"number":3},"children":[{title: {}, children: [{title: {}}, {title: {}}]}]}]
recalc(data2);
console.log(data2)

关于javascript计算深度嵌套数组元素的个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60988902/

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