2013-10-27 2 views

ответ

3
let $x := [1, 2, 4 ,3, 3, 3, 1, 2, 5] 
return [ distinct-values($x[]) ] 
0

Используйте replace function несколько раз:

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

Вот общий эквивалент JavaScript через JSON.parse() метод, который удаляет дубликаты автоматически:

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)() 

He повторно тест Жгут:

0

регулярное выражение: заменить, безусловно, не путь для этой проблемы.

Хотя решение Matthias не работает на Попробуйте Зорба, this script делает:

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

Hermann.

Смежные вопросы