2016-11-21 46 views
1

我一直在寻找一种很好的方式来获得真正的嵌套值,当其中一个属性可能为null或未定义时。获取嵌套值的速记

例子中的物体:

var a = { 
    b: { 
     c: { 
      d: 10 
     } 
    } 
} 

现在,让我们说,这是该对象具有当它是完全填充,但有时b为未定义或C或甚至d的结构。在JavaScript的我将可能采取这样的事情:

var d = a && a.b && a.b.c && a.b.c.d // Now d has value d or some falsy value 

在Immutable.js我可以做以下(这是我找到的方式更干净):

var d = a.getIn(['b', 'c', 'd'], null) 

这使我检索值的d,甚至将最终参数设置为默认值,如果在路上有任何失败。

我可以在js中做类似的事吗?

+1

这样做,做它....减少()的方法是我会用什么。 – epascarello

+1

不,没有内置的速记。这就是Immutable.js背后的人们写这个函数的原因。 –

回答

4

在检查值和类型之后,可以用对象减少数组。

function getIn(object, keys, def) { 
 
    return keys.reduce(function (o, k) { 
 
     return o && typeof o === 'object' && k in o ? o[k] : def; 
 
    }, object); 
 
} 
 

 
var a = { b: { c: { d: 10 } } }; 
 

 
console.log(getIn(a, ['b', 'c', 'd'], null)); 
 
console.log(getIn(a, ['b', 'c', 'd', 'e'], null));

+0

这就像你制作underscore.js。 – Mahi

+0

我认为,这不仅仅是这些。 –

+0

然后尝试制作新的js。 'nina.js' – Mahi