JS检索深度字段,同时忽略沿途字段丢失的情况

时间:2014-12-15 05:24:14

标签: javascript json node.js parsing

是否有一种简单的方法或流行的NodeJS库允许在Javascript中检索JSON对象中的深字段而无需在每个级别检查null?例如,在尝试解析此对象时:

var o = {"a": {"b": {"c": {"d": 1}}}}

如果我想要d的值,我必须做类似

的操作
if (o && o['a'] && o['a']['b'] && o['a']['b']['c']) { ... }

写作很简单,但我想知道最流行的方法是什么?我可以想象像:

var value = deepGet(o, ['a', 'b', 'c', 'd']);

注意:我不是在寻找代码来执行此操作。就像我说的那样,实施它是微不足道的。我对最常用的方法感兴趣。必须有一些不需要编写函数的好模式,或者有一个可以使用的预先存在的函数。

3 个答案:

答案 0 :(得分:0)

function deepGet (obj, key_array) {
    for (var i = 0; obj && i < key_array.length; obj = obj[key_array[i++]]) ;
    return obj;
}

答案 1 :(得分:0)

你可以这样做:

function deepGet(obj, path) {
  var segment = path[0];
  if(path.length === 1) {
     return obj[path[0]];
   }
   else if(obj[segment]) {
     return deepGet(obj[segment], path.slice(1));
   }
   else {
    return undefined;
   }
 }

答案 2 :(得分:0)

您可以这样做:

var o = {"a": {"b": {"c": {"d": 1}}}};
var value = deepGet(o, ['a', 'b', 'c', 'd']);

function deepGet(obj, pathArr){
    var curr = obj;

    for(var i = 0 ; i < pathArr.length && curr ;i++)
    {
        curr = curr[pathArr[i]];
    }

    return curr;
}

console.log(value); // 1

JSFIDDLE