我真的很喜欢 JSONata——很棒的库,谢谢!
我一直在玩弄的一件事是在特定键值上连接两个对象数组。
考虑库示例(有点简化):
library.loans@$L.books@$B[$L.isbn=$B.isbn].{
'customer': $L.customer,
'book': $B.title
}
我(从您的文档等)得到的印象是,这会为贷款数组中的每个条目迭代书籍数组,然后过滤输出。
问题 1:从性能的角度来看,这是正确的思考方式吗?以 .loans 还是 .books 开头是否重要?快速测试表明代码可以用任何一种方式编写......直觉上我会想象如果我有一个预过滤器(例如,只查看“过期”贷款),那么如果我从贷款开始并首先过滤它,我可以增加表现。听起来很合理,或者这是在草率下结论?
问题 2:使用映射重写此查询是否更有效(对于更大的数据集,显然),对于 O(m+n) 而不是 O(m*n)?我的意思是:
(
$booksById := library.books{$.isbn: $};
library.loans.{
'customer': $.customer,
'book': $lookup( $booksById, $.isbn ).title
}
)
再次感谢图书馆 - 易于学习且非常有用。