MarkLogic-如何使用javascript有效过滤序列

MarkLogic-如何使用javascript有效过滤序列,javascript,filtering,sequence,marklogic,Javascript,Filtering,Sequence,Marklogic,我需要通过检查元素的存在,用javascript过滤MarkLogic序列(在cts查询之后)。如果元素存在,则显示该值。 我知道这在XQuery中是可能的 fn:filter(function($a) { fn:not(fn:empty($a/es:envelope/es:instance/MyEntity/MyField)) }, $miseq)/es:envelope/es:instance/MyEntity/MyField 我没有看到Javascript的等价物。我知道我可以通过使用f

我需要通过检查元素的存在,用javascript过滤MarkLogic序列(在cts查询之后)。如果元素存在,则显示该值。 我知道这在XQuery中是可能的

fn:filter(function($a) { fn:not(fn:empty($a/es:envelope/es:instance/MyEntity/MyField)) }, $miseq)/es:envelope/es:instance/MyEntity/MyField
我没有看到Javascript的等价物。我知道我可以通过使用for循环手动实现这一点,但性能要差得多(更不用说没有那么漂亮了)

有什么建议吗


谢谢

您知道如何从XQuery执行此操作。您可以从javascript调用xquery。如果有足够的理由这样做(比如性能),我建议你试试你所知道的。 Javascript没有XQuery所具有的序列的核心语言概念,因此在XQuery中作为“核心”语言语句所能做的事情不能总是在Javascript中完成(反之亦然)。对JavaScript的支持并不意味着XQuery可能是更好的选择(反之亦然)。支持从JavaScript调用XQuery确实意味着这个用例被认为是合理的(反之亦然)。
多语种不是咒骂

A
Sequence
Iterable
的一个实例,如中所述。因此,您可以像JavaScript中的其他iterables一样迭代它。比如:

var result = [];

for (const a of miseq) {
   var myField = a.xpath('/es:envelope/es:instance/MyEntity/MyField');

   if (fn.exists(myField)) {
     result = result.concat(myField.toArray()); // you may be pulling more than one element
   }
}

米塞克常数?谢谢你的评论。是的,我知道这在for循环中是可能的,但根据我做的两个测试,性能明显比使用XQuery方法差,所以我想知道javascript是否有一个等价物。似乎没有。谢谢大家!@在MGS86中,XQuery的性能是否更好取决于全貌。你的序列是从哪里来的,你在用它做什么?如果你有很多结果,并且你正在经历所有,那无论如何都需要很多时间。我可以想象,通过XQuery中XPath的自然集成,优化器可以比JavaScript更轻松地优化XQuery代码,但在大多数情况下,您可以编写性能相同的JavaScript代码。“所以我想知道JavaScript是否有一个等价物。似乎没有。”@grtjn的答案正是如此“javascript的等价物”。再靠近一点,它就会是“等价物”,在这种情况下javascript必须=xquery。谢谢DALDEI。我以前没有这样做过,但因为似乎没有javascript的等价物,我会尝试一下。