Javascript: Comparing SINGLE Value Against MULTIPLE Values with OR Operands

17,453

Solution 1

You could use a variable and multiple comparison, but that's still lengthy:

var text = item[i].innerText;
if (text === 'Argentina' | text === 'Australia' | text === 'Brazil' | text === 'Canada' | text === 'China' | text === 'Colombia' | text === 'France' | text === 'Germany' | text === 'Indonesia' | text === 'India' | text === 'Italy' | text === 'Japan' | text === 'Malaysia' | text === 'Mexico' | text === 'Philippines' | text === 'Russia' | text === 'South Africa' | text === 'Sweden' | text === 'Switzerland' | text === 'United Kingdom' | text === 'USA')

Or you could just use an array and check if the string is contained in it.

var matches = ['Argentina','Australia','Brazil','Canada','China','Colombia','France','Germany','Indonesia','India','Italy','Japan','Malaysia','Mexico','Philippines','Russia','South Africa','Sweden','Switzerland','United Kingdom','USA'];
if (~ matches.indexOf(item[i].innerText) …

Yet, for the complicated != -1 comparison and the lack of native indexOf in older IEs, people tend to use regexes:

var regex = /Argentina|Australia|Brazil|Canada|China|Colombia|France|Germany|Indonesia|India|Italy|Japan|Malaysia|Mexico|Philippines|Russia|South Africa|Sweden|Switzerland|United Kingdom|USA/
if (regex.test(item[i].innerText)) …

Solution 2

var options = ['Argentina', 'Australia', 'Brazil', 'Canada', ...];
if (options.indexOf(item[i].innerText) !== -1){
  // item[i] was found in options
}

Something like that? use Array.indexOf (Unless I've mis-read the question? In which case post a comment and I'll do my best to re-work my answer)

Share:
17,453

Related videos on Youtube

AlecPerkey
Author by

AlecPerkey

Updated on September 16, 2022

Comments

  • AlecPerkey
    AlecPerkey over 1 year

    Possible Duplicate:
    Check variable equality against a list of values
    Javascript if statement with multiple permissible conditions

    I must click the same 21 of 253 items (li) in a dropdown list (ul).

    Scrolling I'll have to do this for the same list on 500+ pages, I figured I could Javascript inject each ul, loop through and click each li which happens to be one of the 21. It seems I cannot do something like

     if(item[i] === ('aasdf'|'basdf'|'cwefw'|'asdfd'|'trehe'|'ferth'|'erthg'|'erthh'|'ierth'|'jeth'|'kerth'|'lerth'|'merth'|'psdfg'|'gregq'|'rsrgs'|'sress'|'srget'|'sergu'|'sdfgsv'))
    

    Is there a syntactically cleaner way of writing this ugly if statement below?

    var item = document.getElementById('myDropdownList').getElementsByTagName('li');
    
    for (i=0;i<item.length;i++){
    
        if(item[i].innerText === 'Argentina' | item[i].innerText === 'Australia' | item[i].innerText === 'Brazil' | item[i].innerText === 'Canada' | item[i].innerText === 'China' | item[i].innerText === 'Colombia' | item[i].innerText === 'France' | item[i].innerText === 'Germany' | item[i].innerText === 'Indonesia' | item[i].innerText === 'India' | item[i].innerText === 'Italy' | item[i].innerText === 'Japan' | item[i].innerText === 'Malaysia' | item[i].innerText === 'Mexico' | item[i].innerText === 'Philippines' | item[i].innerText === 'Russia' | item[i].innerText === 'South Africa' | item[i].innerText === 'Sweden' | item[i].innerText === 'Switzerland' | item[i].innerText === 'United Kingdom' | item[i].innerText === 'USA'){
    
        item[i].click();
    
        }
    
    }
    
  • John Dvorak
    John Dvorak over 11 years
    It's the first time I've seen ~x for x!==-1. Good job.
  • John Dvorak
    John Dvorak over 11 years
    By the way, do you know what -~+[] is?
  • Bergi
    Bergi over 11 years
    Sounds like 1? But I'm sure there is a question on explaining that...
  • John Dvorak
    John Dvorak over 11 years
    I'm actually thinking of using ~~X (dubbing it the "circa operator") instead of 0|X for casting to int.
  • AlecPerkey
    AlecPerkey over 11 years
    Thank you, & also for all these ~ operators, I have more to research now :)