如何在JSONata中获取数组中的元素索引

时间:2018-04-04 15:55:41

标签: jsonata

JSONata提供了几个操作数组内容的函数。但是,我无法确定如何返回找到的元素的索引(类似于JavaScript中的Array.indexOf函数)。我正在寻找类似的东西:

$indexOf(Account.Order[OrderID="order103"])
or
Account.Order.indexOf(OrderID="order103")
or
Account.Order[OrderID="order103"].index

3 个答案:

答案 0 :(得分:1)

您可以合并地图的索引:

Account.Order ~> $map(function($v, $i) {
  $merge([{'Index': $i}, $v])
})~>function($x){$x[OrderID="order103"].Index}

答案 1 :(得分:1)

尝试一下:

Account.Order ~> $map(function($v, $i) { $v.OrderID = 'order103' ? $i })

答案 2 :(得分:0)

两个建议的解决方案都无法确保有效的响应(如果找不到),但是添加其他测试似乎可以达到我的期望:

($x:=Account.Order ~> $map(function($v, $i) { $v.OrderID = 'order101' ? $i });
$exists($x)?$x:-1)

将返回-1

($x:=Account.Order ~> $map(function($v, $i) { $v.OrderID = 'order103' ? $i });
$exists($x)?$x:-1)

将返回0

($x:=Account.Order ~> $map(function($v, $i) { $v.OrderID = 'order104' ? $i });
$exists($x)?$x:-1)

将返回1