如何在Javascript中进入n维对象数组?

时间:2013-05-15 08:58:27

标签: javascript

我有一个n维n的对象数组是未知的。 以下是数据示例:

Data = [{"value":{"Id":"1","Text":"abcd","Parent":""},"children":[{"value":{"Id":"2","Text":"abcd","Parent":"1"},"children":[{"value":{"Id":"3","Text":"abcd","Parent":"1"},"children":[{"value":...

我想在所有这个数组中旅行以读取对象数据。我怎么能用javascript做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以执行这样的递归算法:

function travel(d){
        if (d[0] && d[0].value){
          console.log(d[0].value.Id);                          
        }
    if (d[0].children && typeof d[0].children == "object"){
            // if children exist call function recursively
            travel(d[0].children);
        }
}
travel(Data);

查看the example,将您孩子的Id输出到控制台(F12)。这是一个简单的版本,例如你必须考虑阵列中存在多个子节点。但我认为你明白了。

答案 1 :(得分:1)

使用递归,假设你想要的就是使用像这样的东西

var data = [
    {
        "value": {
            "Id": "1",
            "Text": "abcd",
            "Parent": ""
        },
        "children": [
            {
                "value": {
                    "Id": "2",
                    "Text": "abcd",
                    "Parent": "1"
                },
                "children": [
                    {
                        "value": {
                            "Id": "3",
                            "Text": "abcd",
                            "Parent": "1"
                        }
                    }
                ]
            }
        ]
    }
];

function travel(data){
    for(var i =0;i< data.length;++i){
        if(data[i].hasOwnProperty('value')){
            console.log('Value: ',data[i].value);
        }
        if(data[i].hasOwnProperty('children')){
            travel(data[i].children);
        }
    }
}

function collect(data) {
    var res= [];
    function travelAux(data){
        for(var i =0;i< data.length;++i){
            if(data[i].hasOwnProperty('value')){
                res.push(data[i].value);
            }
            if(data[i].hasOwnProperty('children')){
                travelAux(data[i].children);
            }
        }
    }
    travelAux(data);
    return res;
}
travel(data);