Home > Software design >  How to use array .filter() to search key value in JSON array of objects
How to use array .filter() to search key value in JSON array of objects

Time:04-20

If I have an array of objects like so in playlists.json

"playlists" : [
      {
        "id" : "1",
        "owner_id" : "2",
        "song_ids" : [
          "8",
          "32"
        ]
      },
      {
        "id" : "2",
        "owner_id" : "3",
        "song_ids" : [
          "6",
          "8",
          "11"
        ]
      },
      {
        "id" : "3",
        "owner_id" : "7",
        "song_ids" : [
          "7",
          "12",
          "13",
          "16",
          "2"
        ]
      }
    ]

and in Node I read in the file like this:

const data = JSON.parse(fs.readFileSync('playlists.json'));

I want to write a .filter() function that can search by id and mutate the result into a new array thereby removing the entry tested for.

Of course we can access the index like this: playlists[0].id);

How would write the .filter() to test for a certain id i.e. generate a new array with value removed? (mutate) I wrote some code below but it is wrong and noob.

const someId = "2"
const result = playlists.filter(playlist => playlist.id !== someId)

New array of result would contain:

"playlists" : [
      {
        "id" : "1",
        "owner_id" : "2",
        "song_ids" : [
          "8",
          "32"
        ]
      },
      {
        "id" : "3",
        "owner_id" : "7",
        "song_ids" : [
          "7",
          "12",
          "13",
          "16",
          "2"
        ]
      }
    ]

CodePudding user response:

You used filter fine, however, you have select the key from your json object. Below is an example.

 const jsonFile = {
        "playlists" : [
              {
                "id" : "1",
                "owner_id" : "2",
                "song_ids" : [
                  "8",
                  "32"
                ]
              },
              {
                "id" : "2",
                "owner_id" : "3",
                "song_ids" : [
                  "6",
                  "8",
                  "11"
                ]
              },
              {
                "id" : "3",
                "owner_id" : "7",
                "song_ids" : [
                  "7",
                  "12",
                  "13",
                  "16",
                  "2"
                ]
              }
            ]
        }
        const someId = 2
        const result = jsonFile.playlists.filter(playlist => playlist.id !== someId)
        console.log(result)

CodePudding user response:

After some inspection. I needed to used the parent object reference with playlists to achieve the proper result like so:

const someId = "2";
const result = data.playlists.filter(playlist => playlist.id !== someId)
console.log(result);
  • Related