KYin
KYin

Reputation: 559

What string method for matching specific strings in Javascript

This might be a simple duplicate question but I couldn't find any solution that resolve my case below. Please help me out! :)


I'm looking for a string method to check if the value matches a specific string and return that result.

I'm currently using the .includes method and not getting the result I want because it includes all the results that contain a character from the string. (If users choose "$", it will also return the results including "$$" and "$$$")

-> I only want them to return the results with exactly the value of strings above. So what to use instead of .includes ?

// Initial states:    
const [foodList, setFoodList] = useState([])
const [foodName, setFoodName] = useState('')
const [isVegetarian, setIsVegetarian] = useState('')
const [priceRange, setPriceRange] = useState('$')

const [textSearch, setTextSearch] = useState('')
const [priceDropdown, setPriceDropdown] = useState('')
const [vegDropdown, setVegDropdown] = useState('')

// Search.js:
    const newSearch = props.foodList.filter((value) => {
            return (
              value.foodName.toLowerCase().includes(textSearch.toLowerCase()) &&
              // What to use instead of .includes here?
              value.priceRange.toLowerCase().includes(priceDropdown.toLocaleLowerCase()) 
              && value.isVegetarian.includes(vegDropdown.toLowerCase())
            )
          }
      )

Upvotes: 0

Views: 65

Answers (1)

Sam Thornton
Sam Thornton

Reputation: 983

It looks like a standard === is going to be sufficient for your needs, since you're not checking if a value includes the filter selection, but that it is exactly the selection. (I suspect you'll want the same on the isVegetarian option, too.

const newSearch = props.foodList.filter((value) => {
  return (
    value.foodName.toLowerCase().includes(textSearch.toLowerCase()) &&
    value.priceRange.toLowerCase() === priceDropdown.toLocaleLowerCase() &&
    value.isVegetarian === vegDropdown.toLowerCase()
  )
});

Also, as the comments mentioned, try to keep your example as minimal as possible to reproduce the issue - it's always a balance between context and simplicity. In this case, though, showing a small data structure of foodList and the newSearch method (with a little explanation) would probably be sufficient.

Upvotes: 2

Related Questions