亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript重新計算深度嵌套的數組元素數

javascript重新計算深度嵌套的數組元素數

米琪卡哇伊 2022-06-09 17:27:00
我得到以下數組: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。如果某個元素連同其子元素一起被移除,則所有其他元素的數字也應重新計算。歡迎任何想法如何做到這一點。謝謝
查看完整描述

1 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

您可以創建遞歸函數,每次您的對象結構更改時都會調用該函數以重新計算樹中每個元素的位置。


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)


查看完整回答
反對 回復 2022-06-09
  • 1 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號