一尘不染

安全地访问Javascript嵌套对象

javascript

我有基于json的数据结构,其中包含嵌套对象。为了访问特定的数据元素,我一直将对对象属性的引用链接在一起。例如:

var a = b.c.d;

如果未定义b或bc,则将失败并显示错误。但是,我想获得一个值(如果存在的话),否则只是未定义。无需检查链中每个值是否存在的最佳方法是什么?

我想尽可能地保持这种方法,所以我不必添加大量的辅助方法,例如:

var a = b.getD();

要么

var a = helpers.getDFromB(b);

我也想尝试避免使用try / catch构造,因为这不是错误,因此使用try / catch似乎放错了位置。那合理吗?

有任何想法吗?


阅读 218

收藏
2020-05-01

共1个答案

一尘不染

您可以创建一个通用方法,该方法基于属性名称数组访问元素,该属性名称数组被解释为通过属性的路径:

function getValue(data, path) {
    var i, len = path.length;
    for (i = 0; typeof data === 'object' && i < len; ++i) {
        data = data[path[i]];
    }
    return data;
}

然后,您可以使用以下命令调用它:

var a = getValue(b, ["c", "d"]);
2020-05-01