gpt4 book ai didi

javascript - 从 node.js/javascript 中的对象树检查/分配

转载 作者:搜寻专家 更新时间:2023-11-01 00:08:47 25 4
gpt4 key购买 nike

执行以下操作会冒异常“未定义上没有栏”的风险

var obj = o.Foo.Bar

我能想到的唯一安全的方法:

var obj = (o && o.Foo && o.Foo.Bar ) ? o.Foo.Bar : null;

或者将整个事情放在 try/catch 中,这在大多数情况下对我来说不是一个选项。如果我希望根据缺少的属性发生不同的事情,则会产生更多代码。

是否有一种简洁明了的方式来安全地执行此任务?

** 更新 **

调整了@techfoobar 的回答

function resolve(obj, propertyPath) {
if (!propertyPath) return;

var props = propertyPath.split('.');
var o = obj;
for(var i in props) {
o = o[props[i]];
if(!o) return false;
}
return o;
}

var res = resolve(obj, 'ApiResponse.CommandResponse');
if (res){
for (var i in res){

看起来就像它会得到的一样好......

最佳答案

一种方法是将其移动到一个函数中,无论您需要深入到什么程度,都可以在多个场景中重复使用:

function resolve(_root) {
if(arguments.length == 1) return _root; // in case only root is passed
var o = _root;
for(var i=1; i<arguments.length; i++) {
o = o[arguments[i]];
if(!o) return undefined;
}
return o;
}

对于示例对象 var o = {x: {y:10, c:{h: 20}}};,您可以像这样使用它:

resolve(o, 'x') 给出 {y:10, c:{h: 20}}

resolve(o, 'x', 'c', 'h') 给出 20

鉴于

resolve(o, 'x', 'c', 'boo') 给出 undefined

在您的情况下,您可以像这样使用它:

var obj = resolve(o, 'Foo', 'Bar');
if(obj !== undefined) { // successfully resolved
// do stuff ...
}

关于javascript - 从 node.js/javascript 中的对象树检查/分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16626890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com