JS - jQuery inarray ignoreCase() and contains()

前端 未结 2 1407
北恋
北恋 2021-01-18 02:53

well, I am more of a PHP person, and my JS skills are close to none when it comes to any JS other than simple design related operations , so excuse me if I am asking the obv

2条回答
  •  不知归路
    2021-01-18 03:27

    Part 1

    You can process your array to be entirely lowercase, and lowercase your input so indexOf() will work like it's performing a case insensitive search.

    You can lowercase a string with toLowerCase() as you've already figured out.

    To do an array, you can use...

    arr = arr.map(function(elem) { return elem.toLowerCase(); }); 
    

    Part 2

    You could check for a substring, for example...

    // Assuming you've already transformed the input and array to lowercase.
    var input = "word";
    var words = ["word", "words", "wordly", "not"];
    
    var found = words.some(function(elem) { return elem.indexOf(input) != -1; });
    

    Alternatively, you could skip in this instance transforming the array to be all lowercase by calling toLowerCase() on each elem before you check indexOf().

    some() and map() aren't supported in older IEs, but are trivial to polyfill. An example of a polyfill for each is available at the linked documentation.

    As Fabrício Matté also pointed out, you can use the jQuery equivalents here, $.map() for Array.prototype.map() and $.grep() with length property for Array.prototype.some(). Then you will get the browser compatibility for free.

提交回复
热议问题