【问题标题】:Dynamic scoping in Javascript similarly to MongoJavascript 中的动态范围,类似于 Mongo
【发布时间】:2021-06-25 17:57:24
【问题描述】:

我一直在尝试围绕动态范围进行思考,我喜欢使用 MongoDB,例如,您可以选择使用字符串进行范围(这是伪的,尚未经过测试)

const data = Schema.find({"scope.to.nested": "hello"})

console.log(data)
> [{scope: { to: {nested: "hello"}}}]

您将如何在 Javascript 中完成同样的事情。也许像

console.log(data["scope.to.nested"])
> "hello"

我一直在想办法尽可能清楚地问这个问题,所以如果我只是将未经过滤的想法倒在互联网上而没有真正的连贯期望,请要求澄清????

【问题讨论】:

  • 这与作用域无关,只是嵌套的属性访问?

标签: javascript mongodb ecmascript-6 lexical-scope dynamic-scope


【解决方案1】:

您可以使用 JavaScript 函数来实现:

function getProperty(obj, path) {
    let currentObject = obj;
    let currentIndex = 0;
    
    while (true) {
        let dotIndex = path.indexOf('.', currentIndex);
        let propName = (dotIndex !== -1) ? path.substring(currentIndex, dotIndex) : path.substring(currentIndex);
        currentObject = currentObject[propName];
        
        if (dotIndex === -1)
            break;
        
        currentIndex = dotIndex + 1;
    }
    
    return currentObject;
}

您需要使用函数调用来访问该属性,因此对于您的示例,您需要使用getProperty(data, 'scope.to.nested')。如果您想使用 JavaScript 属性访问运算符 (data['scope.to.nested']) 执行此操作,可以使用 proxies。

请注意,您要求的内容与 dynamic scoping 不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    相关资源
    最近更新 更多