【发布时间】:2021-11-01 12:26:14
【问题描述】:
我正在尝试解析版本字符串(下面的示例),以便根据与下面列出的以下规则匹配的键返回一个值。
每个版本 ID 都可以包含通配符,但输入不能。当然,这个对象是动态的,很可能会包含更多的版本匹配。
在本例中,版本字符串将为“1.2.3”。
- 高于 3.2.1 的版本 ID 将返回“null”
- 3.2.1 和 2.8.10 之间的版本 ID 将返回“testing_server”
- 2.8.10 的版本 ID 将返回“second_value”
- 2.8.10 和 1.0.* 之间的版本 ID 将返回“最后一个值”
- 匹配 1.0.* 或更低(包括 0.*)的版本 ID 将返回“最后一个值”
示例对象:
{
"3.2.1": "testing_server",
"2.8.10": "second_value",
"1.0.*": "last value"
}
我已经尝试了几个函数,每个函数都包括正则表达式或手动比较,但运气不佳。我知道这有点困难,但希望有人能提供帮助。 :)
【问题讨论】:
-
这里没有 JSON。它是一个 POJO(普通的旧 JavaScript 对象)——JSON 是一个对象的字符串表示
-
const version = Object.keys(obj).map(key => { const versions = key.split("."); if (...) return "testing_server"; else if (....) return "second value""; return "error" })... -
我真的不想返回静态值,即使在这种情况下,因为函数需要依赖可能的版本通配符、额外数字等。对象不会相同每次都与版本字符串相同。所以它需要在某种程度上是动态的。
-
我不明白你的评论。在您想要返回静态值而现在不返回的问题中?
-
基本上,对象和它返回的值每次都会不同,因为我必须在大约 40 个不同的“配置”上运行它,你可以调用它们。版本字符串也有所不同,并且不会每次都相同。所以它可能最终使用“3.2.1”作为版本字符串,然后使用“2.3.*”作为另一个版本字符串,以及将遵循相同结构的对齐配置,只是不会包含相同的值。希望这可以更好地清除它:)
标签: javascript node.js versioning