0

I have this array and these values:

const levels = [
    {
       name: 'first level primary school'     
    }, 
    {
       name: 'second level primary school'     
    },
    {
      name: 'first level secondary school'     
    }
]

const isPrimarySchool = false
const isSecondarySchool = false

And I want to iterate the array and find if there is a string with the word 'primary' or 'secondary' and turn the value of isPrimarySchool or isSecondarySchool to true.

The method that I found to resolve this, is this one:

levels.forEach(level => {
            if (
              level.name.toLowerCase().includes('primary')
            ) {
              isPrimarySchool = true
            }
            if (
              level.name.toLowerCase().includes('secondary')
            ) {
              this.isSecondarySchool = true
            }
          })

Is there a better way to resolve this, using lodash or normal javascript?

1
  • you can not reassign to a const. what result do you expect? Commented Jan 19, 2022 at 21:11

3 Answers 3

3

You could take a function for using with Array#some and hand over the expected value.

const
    has = string => o => o.name.includes(string),
    levels = [{ name: 'first level primary school' }, { name: 'second level primary school' }, { name: 'first level secondary school' }],
    isPrimarySchool = levels.some(has('primary')),
    isSecondarySchool = levels.some(has('second'))
    
console.log(isPrimarySchool);
console.log(isSecondarySchool);

Sign up to request clarification or add additional context in comments.

1 Comment

nice usage of function currying!
2

I want to iterate the array and find if there is a string with the word 'primary' or 'secondary' and turn the value of isPrimarySchool or isSecondarySchool to true.

Using some() with includes

const levels = [
    {
       name: 'first level primary school'     
    }, 
    {
       name: 'second level primary school'     
    },
    {
      name: 'first level secondary school'     
    }
]
const isPrimarySchool = levels.some(x=>x.name.toLowerCase().includes('primary'))
const isSecondarySchool = levels.some(x=>x.name.toLowerCase().includes('secondary'))
console.log({isPrimarySchool,isSecondarySchool})

Comments

1

You could use the built-in Array.some() function and some regexp:

isPrimarySchool = levels.some(level => /primary/.exec(level.name));
isSecondarySchool = levels.some(level => /secondary/.exec(level.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.