declare function libjn:intersect($sequence as item()*) as object() { {| let $objects := $sequence[. instance of object()] for $key in head($objects)() where every $object in tail($objects) satisfies exists(index-of($object(), $key)) return { $key : $objects($key) } |} };
libjn:intersect( ( { "foo" : { "bar" : [ 1, 2 ] } }, [ 1, 2, 3, 4 ], { "foo" : "bar", "bar" : "foo" } true(), 1, jn:null() ) )
{ "foo" : [ { "bar" : [ 1, 2 ] }, "bar" ] }