从具有子项的对象数组中获取属性的值

时间:2016-03-07 14:15:03

标签: javascript angularjs

我有一个对象数组,每个对象都有他的孩子,就像这样:

var array = [{
    name: "name",
    children: {
            name: "namename",
            children: {
                    name: "namenamename",
                    prop: "56"
            }
    },
    ...
 },
...
]

现在我想获得字段'prop'的价值,但我想从主要对象,它的孩子或孩子的孩子那里做到这一点:

让我说我的功能:

var get = function(obj) {
    ...
}

我可以发送到这个功能:

get(array[0])
get(array[0].children[0])
get(array[0].children[0].children[0])

我不想为此编写三个函数,如何使用一个get()函数执行此操作?

我想从对象得到“prop”字段,并且对于孩子的每个孩子来说“prop”是相同的。所以在上面的例子中,如果我用

调用函数get()
array[0] //or 
array[0].children //or 
array[0].children[0].children[0] //or 
array[0].children[1].children[0] //or 
array[0].children[0].children[1] 

我应该总是得到同样的道具价值。我需要有能够在整个对象中搜索的功能,但我不知道我是否将这个功能称为父母或其孩子或孩子的这个功能

1 个答案:

答案 0 :(得分:1)

假设所有children属性都是数组,并且收集了具有给定名称的所有属性,那么此提议应该有效。

function getProp(array, prop) {
    var r = [];
    array.forEach(function (a) {
        if (prop in a) {
            r.push(a[prop]);
        }
        if (Array.isArray(a.children)) {
            r = r.concat(getProp(a.children, prop));
        }
    });
    return r;
}

var array = [{ name: "name", children: [{ name: "namename", children: [{ name: "namenamename", prop: "56" }] }] }],
    prop = getProp(array, 'prop');

document.write('<pre>' + JSON.stringify(prop, 0, 4) + '</pre>');