如何从数组中过滤掉值

时间:2016-06-08 14:05:48

标签: jq

我有一个如下所示的对象:{"m":["bad-1", "ok", "also-ok", "bad-2", "bad-3"]}我想仅保留m中不以bad-开头的值。

2 个答案:

答案 0 :(得分:1)

  1. 在这种情况下,您还可以使用startswith / 1
  2. 您还可以使用map / 1,选择/ 1而不是/ 0
  3. 您可以使用| =
  4. 就地更新“m”插槽

    因此:

    .m |= map( select( startswith("bad-") | not ))
    

    产生

    {
      "m": [
        "ok",
        "also-ok"
      ]
    }
    

答案 1 :(得分:0)

此解决方案使用正则表达式和reduce运算符:

reduce .[] as $item ([]; if ($item | test("^bad-")) then . else . + [$item] end)

我学到的东西:

  1. reduce运算符
  2. 您可以通过过滤器(上方$item | test("^bad")
  3. 管道'子项'