【问题标题】:Arangodb array reduceArangodb 数组减少
【发布时间】:2022-11-10 22:55:57
【问题描述】:

鉴于以下情况:

LET replacements = [
  ["foo", "bar"],
  ["bar", "baz"]
]

LET title = "foo"

// JS CODE
// title = replacements.reduce((acc, r) => r.replace(acc[0], acc[1]), title);
// or
// for (const r of replacements) {
//   title = title.replace(r[0], r[1]);
// }

RETURN title

我用 JS 描述的逻辑如何在 aql 中实现?

我似乎无法让FOR 循环在不返回某些内容的情况下工作,而LET 本身似乎不允许进一步重新分配。

【问题讨论】:

  • 你的预期结果是什么?在这种情况下,您想返回值 'bar' 吗?
  • 预期的结果是“baz”,就像你在 JS 中实现的替换被执行后得到的那样
  • 我认为在纯 AQL 中是不可能的,如果你想解决这个问题,你会使用 Foxx 微服务。 LET 分配一旦完成就不能更改。

标签: arangodb aql


【解决方案1】:

这可能是用户功能的情况。

在阿兰戈什语中:

127.0.0.1:8529@_system> require("@arangodb/aql/functions").register(
    "MYFUNC::REPLACEEQ", 
    function (replacements, title) {
        return replacements.reduce(
                (t, r) => t.replace(r[0], r[1]),
                title
        );
    }
);

AQL 查询:

LET replacements = [
  ["foo", "bar"],
  ["bar", "baz"]
]

RETURN MYFUNC::REPLACEEQ(replacements, "foo")
// => ["baz"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2023-02-24
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多