0

I have button that I’m disabling by reading an array and checking its properties.

My array looks like this:

const arr = [
  {id: ‘1’, name: ‘SOME_THING’, status: ‘AGREED’},
  {id: ‘2’, name: ‘THIS_THING’, status: ‘AGREED’},
  {id: ‘3’, name: ‘OTHER_THING’, status: ‘AGREED’},
  {id: ‘4’, name: ‘EVERY_THING’, status: ‘AGREED’},
]; 

My current logic to disable/enable this button looks like this:

arr.filter((item) => item.indexOf(‘THING’) > -1)
   .every((item) => item.status === ‘AGREED’)

Now my requirements have changed. I want to enable/disable the button in the same way, but I want to EXCLUDE specific elements from this array. For example, I want to exclude these two items:

{id: ‘2’, name: ‘THIS_THING’, status: ‘AGREED’},
{id: ‘3’, name: ‘OTHER_THING’, status: ‘AGREED’},

Using my logic, how do I filter my array while EXCLUDING these two?

I realize I can just try to delete these specific items but I was wondering if there was potentially a cleaner way to do that without explicit deletion.

2
  • just add the conditions to the filter Commented Jun 3, 2022 at 14:15
  • Did you extent prototype of object? Object doesn't implement indexOf() by default, Commented Jun 3, 2022 at 14:26

2 Answers 2

2

You can exclude a list of items by always assuming the given key/value pair is true regardless of the value

const exclusionList = ['THIS_THING', 'OTHER_THING'];

arr.filter((item) => item.indexOf(‘THING’) > -1)
   .every((item) => item.status === ‘AGREED’ || exclusionList.includes(item.name))
Sign up to request clarification or add additional context in comments.

Comments

0

Also please add your keyName(name) Where you using indexOf

let arr = [
      {id: '1', name: 'SOME_THING', status: 'AGREED'},
      {id: '2', name: 'THIS_THING', status: 'AGREED'},
      {id: '3', name: 'OTHER_THING', status: 'AGREED'},
      {id: '4', name: 'EVERY_THING', status: 'AGREED'},
      
    ]; 
    const list = ['THIS_THING', 'OTHER_THING'];
    console.log(arr.filter((item) => item.name.indexOf(‘THING’) > -1).every((user) => user.status === 'AGREED' || list.some(user.name)))

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.