Javascript 使用jmespath通过两个参数查找最小值和最大值
我有这样的对象,我需要用jmespath评估哪个是“最便宜的”Javascript 使用jmespath通过两个参数查找最小值和最大值,javascript,json,lambda,functional-programming,jmespath,Javascript,Json,Lambda,Functional Programming,Jmespath,我有这样的对象,我需要用jmespath评估哪个是“最便宜的” { "wines": [ { "name": "b", "price1": 30, "price2": 110 }, { "name": "a", "price1": 50, "price2": 1 }, { "name": "c", "price1": 40, "price2":
{
"wines": [
{
"name": "b",
"price1": 30,
"price2": 110
},
{
"name": "a",
"price1": 50,
"price2": 1
},
{
"name": "c",
"price1": 40,
"price2": 1130
}
]
}
输出应该是:“a”对象
我正在做:
min_by(wines, &price1, &price2).name
min_by(wines, &price1).name
min_by(wines, sum(&price1, &price2)).name
但是没有运气根据您所说的最便宜,如果您想选择价格1和价格2的最小值相结合的商品,您可以使用:
min_by(葡萄酒,&sum([price1,price2]))
:
&
需要位于第二个参数的开头,因为预期的类型是表达式引用。&sum([price1,price2])
表示对于wines
数组中的每个项目,计算表达式sum([price1,price2])
,并使用结果值确定数组中的哪个项目是最小的
另一个例子是,如果您想在葡萄酒列表中选择价格最低的price1
或price2
,您可以将sum
替换为min
:
$ echo '{
"wines": [
{
"name": "b",
"price1": 30,
"price2": 110
},
{
"name": "a",
"price1": 50,
"price2": 1
},
{
"name": "c",
"price1": 40,
"price2": 1130
}
]
}' | jp 'min_by(wines, &min([price1,price2]))'
{
"price2": 1,
"price1": 50,
"name": "a"
}
wines
是对象中的键/值对,因此它不是minu by(obj.wines,&price1,&price2)。name
(如果您的对象被称为obj
)。我不熟悉jmespath,所以这只是一个猜测。不,这只是一个例子。你是对的,问题是如何计算一个和@你能澄清一下如何计算最便宜的吗?是具有最低值price1
和price2
的项目吗?或者哪个项目的值最低,即price1+price2
?哦,你是节点jmespath的作者吗@但是我可以在nodejs中使用这个吗?我的意思是这样的表达:CHEAPEST_ONLINE=“minu by(context.wines,&sum([price1,price2])”
$ echo '{
"wines": [
{
"name": "b",
"price1": 30,
"price2": 110
},
{
"name": "a",
"price1": 50,
"price2": 1
},
{
"name": "c",
"price1": 40,
"price2": 1130
}
]
}' | jp 'min_by(wines, &min([price1,price2]))'
{
"price2": 1,
"price1": 50,
"name": "a"
}