我有基于json的数据结构,其中包含嵌套对象。为了访问特定的数据元素,我一直将对对象属性的引用链接在一起。例如:
var a = b.c.d;
如果未定义b或bc,则将失败并显示错误。但是,我想获得一个值(如果存在的话),否则只是未定义。无需检查链中每个值是否存在的最佳方法是什么?
我想尽可能地保持这种方法,所以我不必添加大量的辅助方法,例如:
var a = b.getD();
要么
var a = helpers.getDFromB(b);
我也想尝试避免使用try / catch构造,因为这不是错误,因此使用try / catch似乎放错了位置。那合理吗?
有任何想法吗?
您可以创建一个通用方法,该方法基于属性名称数组访问元素,该属性名称数组被解释为通过属性的路径:
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"]);