我想删除 JSONiq 数组中的重复项。
let $x := [1, 2, 4 ,3, 3, 3, 1, 2, 5]
如何消除 $x 中的重复项?
我想删除 JSONiq 数组中的重复项。
let $x := [1, 2, 4 ,3, 3, 3, 1, 2, 5]
如何消除 $x 中的重复项?
let $x := [1, 2, 4 ,3, 3, 3, 1, 2, 5]
return [ distinct-values($x[]) ]
多次使用替换功能:
replace($x, "([1-5])(.*)\1", "$1")
这是一个功能齐全的 JavaScript 等价物:
[1,2,4,3,3,1,2,5].toString().replace(/([1-5]),(\1)/g, "$1").replace(/(,[1-5])(.*)(\1)/g,"$1$2").replace(/([1-5])(.*)(,\1)/g,"$1$2")
这是通过该JSON.parse()
方法实现的通用 JavaScript 等效项,它会自动删除重复项:
var foo = [1,2,4,3,3,1,2,5];
var bar = "{" + foo.toString() + "}"
var baz = bar.replace(/(\d)(.)/g , '\u0022$01\u0022:\u0022\u0022$02')
var bop = JSON.parse(baz)
var buz = JSON.stringify(bop).replace("{","[").replace("}","]").replace(/:""/g,"")
var result = Function("return" + buz)()
这是一个测试工具:
regexp:replace 绝对不是解决这个问题的方法。
虽然 Matthias 的解决方案不适用于 Try Zorba,但此脚本可以:
let $x := [1, 2, 4 ,3, 3, 3, 1, 2, 5]
return [ distinct-values( jn:members($x) ) ]
它返回(在上面的链接上试用):
[ 1, 2, 3, 4, 5 ]
对于DataPower Gateways JSONiq 处理器,脚本需要更详细一些。在那里你可以免费获得漂亮的打印结果:
$ cat dv.xq
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:method "json";
declare option jsoniq-version "0.4.42";
[ distinct-values( jn:members(.) ) ]
$
$ coproc2 dv.xq <(echo '[1, 2, 4 ,3, 3, 3, 1, 2, 5]') http://dp1-l3:2226; echo
[
1,
2,
4,
3,
5
]
$
赫尔曼。