当前位置: 首页 > 知识库问答 >
问题:

Rails对所有对象都有一个“尝试”方法。有没有办法在Javascript中做类似的事情?

段干宜
2023-03-14

因为nullundefined不是JavaScript中的对象,我猜它可能是一个全局帮助函数?

示例用法可以是这样的:

var a = { b: { c: { d: 'hello world!' } } };
tryPath(a, 'b', 'c', 'd'); // returns 'hello world!'
tryPath(a, 'x', 'c', 'd'); // returns undefined

共有3个答案

唐景山
2023-03-14
var tryPath = function tryPath() {
    if (arguments.length < 2) {
        return undefined; // Not valid
    } else {
        var object = arguments[0];
        for (var i = 1; i < arguments.length; i++) {
            if (object !== null && typeof object === 'object') {
                object = object[arguments[i]];
            } else {
                return undefined;
            }
        }
        return object;
    }
};
洪旻
2023-03-14

您可以在不使用辅助函数的情况下完成相当简单的操作:

var a = { b: { c: { d: 'hello world!' } } };
a && a.b && a.b.c && a.b.c.d; // returns 'hello world!'
a && a.x && a.x.c && a.x.c.d; // returns undefined
厍书
2023-03-14

您甚至可以使用数组来缩短它。原型减少,如下所示

function tryPath(object) {
    var path = Array.prototype.slice.call(arguments, 1);
    if (!path.length) return undefined;
    return path.reduce(function(result, current) {
        return result === undefined ? result : result[current];
    }, object);
}

var a = { b: { c: { d: 'hello world!' } } };
console.assert(tryPath(a, 'b', 'c', 'd') === 'hello world!');
console.assert(tryPath(a, 'x', 'c', 'd') === undefined);
console.assert(tryPath(a) === undefined);
 类似资料:
  • 我试图在java中使用Hibernate和TypedQuery。 我试图调用的方法有一个签名 我想像bellow一样调用它,但是用一个真实的实例替换null。 上面的代码经过编译,但显然带有空指针异常。 如果我对擦除的理解是正确的,那么只要我得到类对象的一个实例,这就行了,因为所有泛型类型信息在运行时都会丢失。 是否有任何方法,我可以得到一个类的实例,我可以分配给变量cls,使这个代码将工作?

  • 问题内容: 根据MDN 文档: 该 方法冻结对象:即,防止向其添加新属性;防止现有属性被删除;并防止更改现有属性或其可枚举性,可配置性或可写性。本质上,对象实际上是不可变的。该方法返回被冻结的对象。 我期望在某个日期调用冻结会阻止对该日期进行更改,但是它似乎没有用。这是我正在做的(运行Node.js v5.3.0): 我本以为调用会失败或什么都不做。任何想法如何冻结日期? 问题答案: 有没有办法O

  • 问题内容: 来自目标C的您可以在2个对象之间调用函数以使它们维护一个引用,如果在运行时您不希望在删除该对象的引用之前也不要破坏该对象的话,这会很方便。迅捷有与此类似的东西吗? 问题答案: 这是一个从jckarter的答案衍生而来的简单但完整的示例。 它显示了如何向现有类添加新属性。它通过在扩展块中定义计算属性来实现。计算的属性存储为关联的对象: 编辑: 如果需要支持获取未初始化属性的值并避免发生错

  • 问题内容: 我的用户库具有以下用于注册的代码 在我的mongooes模式中,我实现了中间件 得到以下问题 我的问题是:: 如何解决这个问题? 如何从mongooes中间件捕获错误到我的lib函数(捕获)? 问题答案: 似乎您没有使用Bluebird,但使用了mongoose promises(mpromise),它没有方法。 您可以通过解决此问题 在确定模型后使用, 使用投猫鼬承诺变成一个蓝鸟

  • 因为这个方法是在运行时执行的,所以需要对它进行测试吗

  • 我有一个关于嘲笑的问题。在kotlin中,当您使用Mockito时,您可以: 或 有没有办法在dart/flutter中做这样的事情?我真的只需要将mock传递给某个函数并忘记,为什么我必须创建对象并使用Mock类扩展它? 有没有其他的图书馆可以帮助解决这个问题?