从对象数组中获取属性的值。有孩子的物品

时间:2017-10-11 05:57:54

标签: javascript arrays object iteration

我想从这里开始:

var example=[
    {
        "value": 4,
        "label": "Bangalore",
        "path": "fa fa-tachometer",
        "parentmenu": null,
        "layout": null,
        "children": [
            {
                "value": 5,
                "label": "HSR Layout",
                "path": "fa fa-tachometer",
                "parentmenu": 4,
                "layout": null,
                "children": [
                    {
                        "value": 6,
                        "label": "Building1",
                        "path": "fa fa-tachometer",
                        "parentmenu": 5,
                        "layout": null,
                        "children": [
                            {
                                "value": 7,
                                "label": "Floor1",
                                "path": "fa fa-tachometer",
                                "parentmenu": 6,
                                "layout": null,
                                "children": [
                                    {
                                        "value": 8,
                                        "label": "Telemon_12765213",
                                        "path": "fa fa-tachometer",
                                        "parentmenu": 7,
                                        "layout": null,
                                        "children": [
                                            {
                                                "value": 9,
                                                "label": "Battery",
                                                "path": "fa fa-tachometer",
                                                "parentmenu": 8,
                                                "layout": null,
                                                "children": []
                                            },
                                            {
                                                "value": 10,
                                                "label": "MSensor",
                                                "path": "fa fa-tachometer",
                                                "parentmenu": 8,
                                                "layout": null,
                                                "children": []
                                            }
                                        ]
                                    },
                                    {
                                        "value": 11,
                                        "label": "Telemon_12765245",
                                        "path": "fa fa-tachometer",
                                        "parentmenu": 7,
                                        "layout": null,
                                        "children": [
                                            {
                                                "value": 12,
                                                "label": "Battery",
                                                "path": "fa fa-tachometer",
                                                "parentmenu": 11,
                                                "layout": null,
                                                "children": []
                                            },
                                            {
                                                "value": 13,
                                                "label": "MSensor",
                                                "path": "fa fa-tachometer",
                                                "parentmenu": 11,
                                                "layout": null,
                                                "children": []
                                            }
                                        ]
                                    }
                                ]
                            },
                            {
                                "value": 14,
                                "label": "Floor2",
                                "path": "fa fa-tachometer",
                                "parentmenu": 6,
                                "layout": null,
                                "children": [
                                    {
                                        "value": 15,
                                        "label": "Telemon_12765248",
                                        "path": "fa fa-tachometer",
                                        "parentmenu": 14,
                                        "layout": null,
                                        "children": [
                                            {
                                                "value": 16,
                                                "label": "Battery",
                                                "path": "fa fa-tachometer",
                                                "parentmenu": 15,
                                                "layout": null,
                                                "children": []
                                            },
                                            {
                                                "value": 17,
                                                "label": "MSensor",
                                                "path": "fa fa-tachometer",
                                                "parentmenu": 15,
                                                "layout": null,
                                                "children": []
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    },
                    {
                        "value": 18,
                        "label": "Building2",
                        "path": "fa fa-tachometer",
                        "parentmenu": 5,
                        "layout": null,
                        "children": [
                            {
                                "value": 19,
                                "label": "Floor1",
                                "path": "fa fa-tachometer",
                                "parentmenu": 18,
                                "layout": null,
                                "children": [
                                    {
                                        "value": 20,
                                        "label": "Telemon_12765254",
                                        "path": "fa fa-tachometer",
                                        "parentmenu": 19,
                                        "layout": null,
                                        "children": [
                                            {
                                                "value": 21,
                                                "label": "Battery",
                                                "path": "fa fa-tachometer",
                                                "parentmenu": 20,
                                                "layout": null,
                                                "children": []
                                            },
                                            {
                                                "value": 22,
                                                "label": "MSensor",
                                                "path": "fa fa-tachometer",
                                                "parentmenu": 20,
                                                "layout": null,
                                                "children": []
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
];

到这里:

var a=[4, 5, 6, 7, 8, 11, 14, 15, 18, 19, 20];

显然我可以循环它并构建数组,但我可以从父节点获取键,但我想要所有对象的值。父母以及孩子。

3 个答案:

答案 0 :(得分:3)

尝试使用JSON.parse()。匹配value名称密钥,然后将受尊重的values推送到数组

var example = [{ "value": 4, "label": "Bangalore", "path": "fa fa-tachometer", "parentmenu": null, "layout": null, "children": [{ "value": 5, "label": "HSR Layout", "path": "fa fa-tachometer", "parentmenu": 4, "layout": null, "children": [{ "value": 6, "label": "Building1", "path": "fa fa-tachometer", "parentmenu": 5, "layout": null, "children": [{ "value": 7, "label": "Floor1", "path": "fa fa-tachometer", "parentmenu": 6, "layout": null, "children": [{ "value": 8, "label": "Telemon_12765213", "path": "fa fa-tachometer", "parentmenu": 7, "layout": null, "children": [{ "value": 9, "label": "Battery", "path": "fa fa-tachometer", "parentmenu": 8, "layout": null, "children": [] }, { "value": 10, "label": "MSensor", "path": "fa fa-tachometer", "parentmenu": 8, "layout": null, "children": [] }] }, { "value": 11, "label": "Telemon_12765245", "path": "fa fa-tachometer", "parentmenu": 7, "layout": null, "children": [{ "value": 12, "label": "Battery", "path": "fa fa-tachometer", "parentmenu": 11, "layout": null, "children": [] }, { "value": 13, "label": "MSensor", "path": "fa fa-tachometer", "parentmenu": 11, "layout": null, "children": [] }] }] }, { "value": 14, "label": "Floor2", "path": "fa fa-tachometer", "parentmenu": 6, "layout": null, "children": [{ "value": 15, "label": "Telemon_12765248", "path": "fa fa-tachometer", "parentmenu": 14, "layout": null, "children": [{ "value": 16, "label": "Battery", "path": "fa fa-tachometer", "parentmenu": 15, "layout": null, "children": [] }, { "value": 17, "label": "MSensor", "path": "fa fa-tachometer", "parentmenu": 15, "layout": null, "children": [] }] }] }] }, { "value": 18, "label": "Building2", "path": "fa fa-tachometer", "parentmenu": 5, "layout": null, "children": [{ "value": 19, "label": "Floor1", "path": "fa fa-tachometer", "parentmenu": 18, "layout": null, "children": [{ "value": 20, "label": "Telemon_12765254", "path": "fa fa-tachometer", "parentmenu": 19, "layout": null, "children": [{ "value": 21, "label": "Battery", "path": "fa fa-tachometer", "parentmenu": 20, "layout": null, "children": [] }, { "value": 22, "label": "MSensor", "path": "fa fa-tachometer", "parentmenu": 20, "layout": null, "children": [] }] }] }] }] }] }];

var res =[]
JSON.parse(JSON.stringify(example), function(keys,values){
if(keys == 'value')
 res.push(values)
})

console.log(res)

答案 1 :(得分:0)

你可以使用递归函数来达到每个节点。

var arr = [];
function getValues(example){
    example.forEach(function(obj){
        //check if object has children i.e. it is a parent
        if(obj.children.length){
            arr.push(obj.value);
            getValues(obj.children);
        }
    });
}

getValues(example);
console.log(arr);

答案 2 :(得分:0)

您可以使用迭代递归方法并检查子项是否有长度。

var data = [{ value: 4, label: "Bangalore", path: "fa fa-tachometer", parentmenu: null, layout: null, children: [{ value: 5, label: "HSR Layout", path: "fa fa-tachometer", parentmenu: 4, layout: null, children: [{ value: 6, label: "Building1", path: "fa fa-tachometer", parentmenu: 5, layout: null, children: [{ value: 7, label: "Floor1", path: "fa fa-tachometer", parentmenu: 6, layout: null, children: [{ value: 8, label: "Telemon_12765213", path: "fa fa-tachometer", parentmenu: 7, layout: null, children: [{ value: 9, label: "Battery", path: "fa fa-tachometer", parentmenu: 8, layout: null, children: [] }, { value: 10, label: "MSensor", path: "fa fa-tachometer", parentmenu: 8, layout: null, children: [] }] }, { value: 11, label: "Telemon_12765245", path: "fa fa-tachometer", parentmenu: 7, layout: null, children: [{ value: 12, label: "Battery", path: "fa fa-tachometer", parentmenu: 11, layout: null, children: [] }, { value: 13, label: "MSensor", path: "fa fa-tachometer", parentmenu: 11, layout: null, children: [] }] }] }, { value: 14, label: "Floor2", path: "fa fa-tachometer", parentmenu: 6, layout: null, children: [{ value: 15, label: "Telemon_12765248", path: "fa fa-tachometer", parentmenu: 14, layout: null, children: [{ value: 16, label: "Battery", path: "fa fa-tachometer", parentmenu: 15, layout: null, children: [] }, { value: 17, label: "MSensor", path: "fa fa-tachometer", parentmenu: 15, layout: null, children: [] }] }] }] }, { value: 18, label: "Building2", path: "fa fa-tachometer", parentmenu: 5, layout: null, children: [{ value: 19, label: "Floor1", path: "fa fa-tachometer", parentmenu: 18, layout: null, children: [{ value: 20, label: "Telemon_12765254", path: "fa fa-tachometer", parentmenu: 19, layout: null, children: [{ value: 21, label: "Battery", path: "fa fa-tachometer", parentmenu: 20, layout: null, children: [] }, { value: 22, label: "MSensor", path: "fa fa-tachometer", parentmenu: 20, layout: null, children: [] }] }] }] }] }] }],
    values = data.reduce(function iter(r, a) {
        return a.children && a.children.length
            ? r.concat(a.value,  a.children.reduce(iter, []))
            : r;
    }, []);

console.log(values);
.as-console-wrapper { max-height: 100% !important; top: 0; }