Vra

Ek het hierdie array.prototype op my bladsy en dit blyk te wees suig baie van die verwerking tyd:

        Array.prototype.findInArray = function(searchStr) {
          var returnArray = false;
          for (i=0; i<this.length; i++) {
            if (typeof(searchStr) == 'function') {
              if (searchStr.test(this[i])) {
                if (!returnArray) { returnArray = [] }
                returnArray.push(i);
              }
            } else {
              var regexp = new RegExp(".*" + searchStr + ".*");
              if (this[i].match(regexp)) {
                if (!returnArray) { returnArray = [] }
                returnArray.push(i);
              }
            }
          }
          return returnArray;
        }
Was dit nuttig?

Oplossing

In die eerste plek, moet jy weet dat jy nie aan die ". *" Aan weerskante, reg? 'N Gereelde uitdrukking reeds by verstek sal oral in die tou te pas. Tweedens, as jy net op soek na 'n konstante string, en hoef nie enige van die gevorderde dinge wat gereelde uitdrukkings bied gebruik, dan is dit beslis vinniger na .indexOf() gebruik. Plus die manier wat jy sal nie hoef te bekommer oor die ontsnapping karakters wat spesiale betekenis het.

Ander wenke

Gereelde uitdrukkings kan wild wissel. Ek dink dat 'n eenvoudige, goed-vervaardigde gewone uitdrukking kan werk so vinnig of vinniger as indexOf (). Aan die ander kant, sou 'n komplekse gereelde uitdrukking meer tyd nodig het, want dit doen meer werk.

Jy het ook 'n leser implementering probleem vertroebel sake. Kort van die skryf van 'n snel lus om die tyd wat dit neem vir elke leser aan elke tipe opsporing te doen met jou spesifieke behoeftes te meet, kan jy nie regtig 'n vaste antwoord.

Wat is erger is jy 'n nuwe gewone uitdrukking voorwerp te skep op elke iterasie van die loop- definieer dit eens, buite die lus, of slaag dit as 'n argument.

Ook vir hierdie gebruik, toets is beter en vinniger as wedstryd .

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top