如何在Javascript中确定父/子数组中的级别?

时间:2017-11-01 06:16:28

标签: javascript arrays tree

我有一个父子树对象。我需要达到孩子的水平。感谢任何帮助。我不介意在数组中添加一个名为level的属性。

[
{
    "id":"1",
    "parent_id":"1",
    "children": [
        {
            "id":"2",
            "parent_id":"1",
            "children" : [
                {
                    "id":"3",
                    "parent_id":"2"
                },
                {
                    "id":"4",
                    "parent_id":"2"
                }
            ]
        }, 
        {
            "id":"5",
            "parent_id":"1",
            "children" : [
                {
                    "id":"6"
                    "parent_id":"5"
                },
                {
                    "id":"7"
                    "parent_id":"5"
                }
            ]
        }
    ]
}

2 个答案:

答案 0 :(得分:0)

如何检查数据并使用id创建一个对象数组,并将其作为属性级别。如下所示:

  

编辑:编辑添加输入字段,以使解决方案更加高效/互动:)

var data = [
{
"id": "1",
"parent_id": "1",
"children": [{
    "id": "2",
    "parent_id": "1",
    "children": [{
        "id": "3",
        "parent_id": "2"
    }, {
        "id": "4",
        "parent_id": "2"
    }]
}, {
    "id": "5",
    "parent_id": "1",
    "children": [{
        "id": "6",
        "parent_id": "5"
    }, {
        "id": "7",
        "parent_id": "5"
    }]
}]
}
,
{
"id": "8",
"parent_id": "8"
}
];

function findLevel(arr,level) {
  return arr.reduce(function (levelled, toLevel) {
   levelled = levelled.concat({"id":toLevel.id,"level":level});
    if(toLevel.children)
    {
        return levelled.concat(findLevel(toLevel.children,(level+1)));
    }

  return levelled;
  }, []);
}

var levelledData = findLevel(data,1);

console.log(levelledData);

//for interactive use only
document.getElementById('b').onclick  = function() {
var elementId = document.getElementById('a').value;
var level = levelledData.filter(x => x.id === elementId).map(x => x.level);
var message = level.length?"Level of element by id: "+elementId+' is '+level:"Element by id "+elementId+' not found';
alert(message);
console.log(message);
};
Enter id of children or parent to find level: <input type="text" value="1" id="a"/>
<br/>
<input type="button" id="b" value="get level"/>

答案 1 :(得分:0)

您可以使用以下命令找到特定节点ID的级别:

&#13;
&#13;
var arrExample = [
    {
        "id": "1",
        "parent_id": "1",
        "children": [{
            "id": "2",
            "parent_id": "1",
            "children": [{
                "id": "3",
                "parent_id": "2"
            }, {
                "id": "4",
                "parent_id": "2"
            }]
        }, {
            "id": "5",
            "parent_id": "1",
            "children": [{
                "id": "6",
                "parent_id": "5"
            }, {
                "id": "7",
                "parent_id": "5"
            }]
        }]
    }];

function findLevelHelper(arr, idToFind, level){
    if (!arr) {
        return 0;
    }

    for (var i = 0; i < arr.length; i++) {
        if (arr[i].id === idToFind) {
            return level;
        }

        var foundLevel = findLevelHelper(arr[i].children, idToFind, level + 1);
        if (foundLevel !== 0) {
            return foundLevel;
        }
    }

    return 0;
}

function findLevel(arr, idToFind) {
    return findLevelHelper(arr, idToFind, 1);
}

console.log(findLevel(arrExample, "7", 1));
&#13;
&#13;
&#13;