javascript - Javascript 中的动态范围,类似于 Mongo
问题描述
我一直在尝试围绕动态范围进行思考,我喜欢使用 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 函数实现此目的:
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']
) 执行此操作,您可以使用代理。
请注意,您要求的内容与动态范围不同。
推荐阅读
- makefile - 忍者文件到makefile
- javascript - 当 console.log 作为参数传递时,它可以工作,但是当 array.push 传递参数时,它不起作用,为什么?
- python-3.x - 如何为 spacy 的自定义命名实体识别准备数据?
- assembly - 执行 ADDS PC, #-4 时会发生什么?无限循环?
- ios - SwiftUI 中列表的 isScrollEnabled 等价物是什么?
- python - 如何动态记录不同级别的消息?例如:logging.x("message") where x in ['warn',error',..]
- java - 在 Java 中引用使用第三方库的类
- stm32 - STM32上的单元测试
- url - 为什么 Firefox 会自动将“%25/”添加到我的 URI?
- c - SDL_UpdateTexture ARGB 比 RGBA 快得多