Javascript 使用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":

我有这样的对象,我需要用jmespath评估哪个是“最便宜的”

{
  "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"
}