(有些精确度:我想要一个完整的JMES Path解决方案,所以我不想使用JavaScript或其他语言来存储变量)
例如,如果我有一个简单的对象,例如:
[
{
"att1":12,
"att2":"name1"
},
{
"att1":15,
"att2":"name2"
},
{
"att1":15,
"att2":"name3"
},
{
"att1":11,
"att2":"name4"
}
]
如果我在此处像这样使用max_by
函数:max_by(@,&att1)
,它将得到以下结果:
{
"att1": 15,
"att2": "name2"
}
在这种情况下,只有一个对象,但是我们可以看到至少有2个对象的att1
中具有最大值。因此,我尝试了以下代码:@[?att1 == max_by(@,&att1)]
,但它给了我一个错误。我不知道为什么,所以问题是:
编辑:我认为这是类型问题。例如,如果我使用这段代码type(`4`)
,它将返回"number"
,但是如果我使用这段代码type(4)
或type(to_number(4))
,它将给我一个错误
EDIT2:如果我尝试执行以下操作:max_by(@,&att1).att1 == `15`
会返回true
,但是当我这样做时:
@[?att1 == max_by(@,&att1)]
返回错误。我也检查过类型,而这个max_by(@,&att1).att1
是一个数字,所以我认为通常不会出现类型错误...
答案 0 :(得分:0)
要按数字过滤,数字必须用back ticks
var arr = [{"att1":12,"att2":"name1"},{"att1":15,"att2":"name2"},{"att1":15,"att2":"name3"},{"att1":11,"att2":"name4"}]
let maxAtt1 = jmespath.search(arr, "max_by(@,&att1).att1")
console.log(jmespath.search(arr, "[?att1 == `" + maxAtt1 + "`]"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jmespath/0.15.0/jmespath.js"></script>