使用jmespath通过两个参数查找min和max

时间:2015-12-14 16:33:44

标签: 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": 1130
    }
  ]
}
输出应该是:' a'对象

我在做:

min_by(wines, &price1, &price2).name
min_by(wines, &price1).name
min_by(wines, sum(&price1, &price2)).name

但没有运气

1 个答案:

答案 0 :(得分:1)

根据您最便宜的含义,如果您想选择最小值为price1和price2的项目,您可以使用:min_by(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, &sum([price1,price2]))'

{
    "price2": 1,
    "price1": 50,
    "name": "a"
}

&需要位于第二个参数的开头,因为期望的类型是表达式引用。 &sum([price1,price2])表示对wines数组中的每个项目,评估表达式sum([price1,price2])并使用结果值来确定数组中的哪个项目是最小值。

另一个例子是,如果您想选择葡萄酒列表中 price1price2的最低价格的商品,您可以替换{{1与sum

min