javascript - 返回深层属性的值(如果存在)

标签 javascript function object return

我编写这个函数是为了搜索并返回对象中深层属性的值,并且想知道是否有一种方法可以使用递归或类似的方法来使函数执行相同的操作但代码更少(并且可能会消除最多可测试五个属性深度的限制)。

如果存在,该函数将返回一个深层属性值,否则返回未定义。

function getDeep(o, p2, p3, p4, p5) {
    if (p5 !== undefined) {
        if (o.hasOwnProperty(p2) && o[p2].hasOwnProperty(p3) && o[p2][p3].hasOwnProperty(p4) && o[p2][p3][p4].hasOwnProperty(p5)) {
            return o[p2][p3][p4][p5];
        }
    } else if (p4 !== undefined) {
        if (o.hasOwnProperty(p2) && o[p2].hasOwnProperty(p3) && o[p2][p3].hasOwnProperty(p4)) {
            return o[p2][p3][p4];
        }
    } else if (p3 !== undefined) {
        if (o.hasOwnProperty(p2) && o[p2].hasOwnProperty(p3)) {
            return o[p2][p3];
        }
    } else if (p2 !== undefined) {
        if (o.hasOwnProperty(p2)) {
            return o[p2];
        }
    } else if (o !== undefined) {
        return o;
    }
}
window.onload = function () {
    var obj = {a:{b:{c:1}}};
    window.console.log(getDeep(obj, 'a', 'b', 'c')); // returns 1;
    window.console.log(getDeep(obj, 'a', 'b', 'd')); // returns undefined;
}

最佳答案

.reduce对此很有用。

演示: http://jsfiddle.net/NU4vF/2

function getDeep() {
    return [].reduce.call(arguments, function(obj, prop) {
        return obj && obj[prop];
    });
}

关于javascript - 返回深层属性的值(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21870547/

相关文章:

javascript - 字符被重复

javascript - 函数 Replace() 的奇怪行为的示例

JavaScript:带有对象参数的对象构造

javascript - 将 javascript 对象数组转换为 JSON

从数组中删除的javascript

javascript - setState 回调函数没有被调用?

javascript - 使用多个 jQuery-minicolors 样本更改多个 div 容器的背景颜色

r - 在用户定义函数中调用 glm() 函数

c - 如果作为 C 中函数的参数给出,是否复制数组

javascript - Angular : Pass objects in directive and check if they are true as flags