Eliminate duplicates in array (JSONiq)

前端 未结 3 1852
萌比男神i
萌比男神i 2020-12-20 01:25

I\'d like to delete duplicates in a JSONiq array.

let $x := [1, 2, 4 ,3, 3, 3, 1, 2, 5]

How can I eliminate the duplicates in $x?

相关标签:
3条回答
  • 2020-12-20 01:39
    let $x := [1, 2, 4 ,3, 3, 3, 1, 2, 5]
    return [ distinct-values($x[]) ]
    
    0 讨论(0)
  • 2020-12-20 01:41

    Use the replace function multiple times:

    replace($x, "([1-5])(.*)\1", "$1")
    

    Here's a fully functional JavaScript equivalent:

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

    Here is a generic JavaScript equivalent via the JSON.parse() method, which removes duplicates automatically:

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

    Here is a test harness:

    • JSONiq Online Tester
    0 讨论(0)
  • 2020-12-20 01:54

    regexp:replace is definitely not the way to go for this problem.

    While Matthias's solution does not work on Try Zorba, this script does:

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

    It returns (try out on above link):

    [ 1, 2, 3, 4, 5 ]
    

    Script needs to be a bit more verbose for DataPower Gateways JSONiq processor. There you get pretty-printed result for free:

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

    0 讨论(0)
提交回复
热议问题