Arangodb阵列减速器

j91ykkif  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(162)

假设如下:

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本身似乎不允许进一步的重新赋值。

dxpyg8gm

dxpyg8gm1#

这可能是用户函数的情况。
在阿兰戈什语中:

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"]

相关问题