【问题标题】:JQ — Remove elements by value not indexJQ - 按值而不是索引删除元素
【发布时间】:2021-12-29 17:27:09
【问题描述】:

我需要删除instances 中设置为“三”或“五”的所有元素。它们的索引并不总是相同的:

{
"address": "localhost",
"name": "local",
"vars": {
    "instances": [
        "one",
        "two",
        "three",
        "four",
        "five"
    ]
  }
}

【问题讨论】:

    标签: arrays json jq subtraction blacklist


    【解决方案1】:

    假设你有:

    [10, 10, 20, 10, 20, 10, 30]
    

    ...您想删除所有20 和所有30。这是一种方法:

    . - [20, 30]
    

    除了对数字进行常规算术减法外,- 运算符还可用于数组,以从第一个数组中删除第二个数组的所有元素。

    https://stedolan.github.io/jq/manual/#Builtinoperatorsandfunctions

    在你的情况下,你可以这样做:

    .vars.instances -= ["three", "five"]
    

    …返回:

    {
      "address": "localhost",
      "name": "local",
      "vars": {
        "instances": [
          "one",
          "two",
          "four"
        ]
      }
    }
    

    【讨论】:

    • |= . - 可以简化为 -= 给你.vars.instances -= ["three", "five"]
    • @pmf 哇!我从来没有想过这可能是一件事。非常感谢。将编辑。
    猜你喜欢
    • 2021-05-24
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 2020-01-02
    • 2010-12-16
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    相关资源
    最近更新 更多