skip to Main Content

I’ve been trying to remove an item from my array for a while now but the filter removes too much.

My array:

[
    {
        "domain": "domain1.com",
        "slug": "monitor"
    },
    {
        "domain": "domain1.com",
        "slug": "monitor-1"
    },
    {
        "domain": "domain2.com",
        "slug": "monitor"
    }
]

I release the following filter

array.filter((item) => item.slug !== 'monitor')

This removed all my results exclude slug monitor-1, which is correct since I am asking the slug with monitor to remove.

Result:

[
    {
        "domain": "domain1.com",
        "slug": "monitor-1"
    },
]

But i only want to remove the slug monitor from domain1.com and not domain2.com

array.filter((item) => item.slug !== 'monitor' && item.domain !== 'domain1.com)

This will remove all the result so the array is empty

[]

How can I make it so that I get it like this, without deleting everything?
So only delete the domain: domain1.com with the slug: monitor.

[
    {
        "domain": "domain1.com",
        "slug": "monitor-1"
    },
    {
        "domain": "domain2.com",
        "slug": "monitor"
    }
]

2

Answers


  1. You are almost correct,just need to change the expression in Array.filter(),below is a reference for you

    let data = [
        {
            "domain": "domain1.com",
            "slug": "monitor"
        },
        {
            "domain": "domain1.com",
            "slug": "monitor-1"
        },
        {
            "domain": "domain2.com",
            "slug": "monitor"
        },
        {
            "domain": "domain2.com",
            "slug": "monitor-1"
        }
    ]
    
    let result = data.filter(d => !(d.slug === 'monitor-1' && d.domain === 'domain1.com'))
    console.log(result)
    Login or Signup to reply.
  2. The item will be kept if the callback returns true and you want to keep it either when the item.slug !== 'monitor' OR when item.domain !== 'domain1.com'

    const input = [
        {
            "domain": "domain1.com",
            "slug": "monitor"
        },
        {
            "domain": "domain1.com",
            "slug": "monitor-1"
        },
        {
            "domain": "domain2.com",
            "slug": "monitor"
        }
    ]
    
    console.log(input.filter((item) => (item.slug !== 'monitor' || item.domain !== 'domain1.com')))
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search