我一直在寻找一种当属性之一为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中做类似的事情吗?
最佳答案
在检查值和类型之后,可以使用对象来缩小数组。
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));