簡體   English   中英

傳銷二叉樹更新

[英]MLM binary tree update

我在 javascript 中嵌套了 object ,其中 object 的 id 正在增加深度。 使用 javascript 支持我在 id 中添加和 object - 2 個子數組將為 3,我需要更新(遞增)id 樹中的所有兄弟姐妹,這只是一個示例代碼,它應該適用於每種情況,例如 id: 4 將變成 5 並且它的所有孩子也將更改 id 更改為 6、7、8 等,我們還需要更改父 id,因為 id 正在更改檢查,例如下面

(
[id] => 1
[parent_id] => 
[children] => Array
    (
        [0] => Array
            (
                [id] => 2
                [parent_id] => 1
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 3
                                [parent_id] => 2
                                [children] => Array
                                    (
                                    )

                            )

                    )

            )

        [1] => Array
            (
                [id] => 4
                [parent_id] => 1
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 5
                                [parent_id] => 3
                                [children] => Array
                                    (
                                    )

                            )

                        [1] => Array
                            (
                                [id] => 6
                                [parent_id] => 3
                                [children] => Array
                                    (
                                    )

                            )

                        [2] => Array
                            (
                                [id] => 7
                                [parent_id] => 4
                                [children] => Array
                                    (
                                    )

                            )

                    )

            )

        [2] => Array
            (
                [id] => 8
                [parent_id] => 1
                [children] => Array
                    (
                    )

            )

    )

)

這個簡單的遞歸 function (假設沒有父節點的節點的 parentId 為undefinednull )應該改變樹並增加節點及其所有子節點的 id 和父 id:

const updateIds = (tree) => {
  tree.id++;
  if (Number.isInteger(tree.parentId)) {
    tree.parentId++;
  }
  tree.children.forEach(child => {
    updateIds(child);
  })
}

這是 id 遞增的 function:

const updateIds = (tree, insertedId) => {
  if (tree.id > insertedId) {
     tree.id++;
  }
  if (Number.isInteger(tree.parentId) && tree.parentId > insertedId) {
    tree.parentId++;
  }
  tree.children.forEach(child => {
    updateIds(child, insertedId);
  })
}

這是我的 function 吹 -

var insId = '';
function updateIds( tree, itemName, newTeam ) {
if ( tree.name === itemName ) {
    const childrenLength = tree.children.length;
    newTeam.id = tree.id + childrenLength + 1;
    insId = tree.id + childrenLength + 1;
    tree.children = [ ...tree.children, newTeam ];
}
if ( insId !== '' && tree.id >= insId && tree.name !== newTeam.name ) {
    tree.id++;
}
if ( insId !== '' && Number.isInteger(tree.parent_id) && tree.parent_id >= insId && tree.name !== newTeam.name) {
    tree.parent_id++;
}
tree.children.forEach(child => { 
    updateIds(child, itemName, newTeam );
});
return tree;

}

一切都很好,直到只有一個案例 senario,比如在根處添加兄弟元素,所以它不會更新這個兄弟元素的 id

如果有人正在尋找對我有用的此類問題,請在下面添加項目部分是解決方案

function depthItem( element ) {
let children = '';
if ( element.children.length > 0 ) {
    children = element.children[ element.children.length - 1 ];
    return depthItem( children );
}
return element;}

function addNestedItem( array, itemName, newTeam ) {
array.forEach( ( element ) => {
    if ( element.name === itemName ) {
        const lastItem = depthItem( element );
        newTeam.id = lastItem.id + 1;
        element.children = [ ...element.children, newTeam ];
    } else {
        return addNestedItem( element.children, itemName, newTeam );
    }
} );
return array;}
function updgradeNestedItemIndex( array, newTeam ) {
array.forEach( ( element ) => {
    if ( element.id >= newTeam.id && element.name !== newTeam.name ) {
        element.id++;
    }
    return updgradeNestedItemIndex( element.children, newTeam );
} );
return array;}

const tempTree = addNestedItem( [ tree ], team.name, newTeam );
const newTree = updgradeNestedItemIndex( tempTree, newTeam );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM