Home > Mobile >  JQ — Remove elements by value not index
JQ — Remove elements by value not index

Time:11-19

I need to delete all elements of instances that are either set to "three" or "five". Their index is not always the same:

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

CodePudding user response:

Suppose you have:

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

…and you want to remove all the 20 and all the 30. Here's one way:

. - [20, 30]

As well as normal arithmetic subtraction on numbers, the - operator can be used on arrays to remove all occurrences of the second array's elements from the first array.

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

In your case you could do:

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

…which returns:

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