Frage

Ich habe diese Array.prototype auf meiner Seite und es scheint eine Menge Verarbeitungszeit Saugen bis werden:

        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;
        }
War es hilfreich?

Lösung

Zunächst einmal wissen Sie, dass Sie müssen das nicht haben. „*“ Auf beiden Seiten, nicht wahr? Ein regulärer Ausdruck bereits standardmäßig wird eine beliebige Stelle innerhalb der Zeichenfolge übereinstimmen. wenn Sie Zweitens suchen nur für eine konstante String und brauchen keine der fortgeschrittenen Sachen zu verwenden, die regulären Ausdrücke bieten, dann auf jeden Fall schneller es ist .indexOf() zu verwenden. Plus auf diese Weise werden Sie nicht zu entkommen Zeichen kümmern, die eine besondere Bedeutung haben.

Andere Tipps

Reguläre Ausdrücke können stark variieren. Ich stelle ich vor, dass ein einfacher, gut gemachter regulärer Ausdruck könnte so schnell arbeiten oder schneller als indexOf (). Auf der anderen Seite würde ein komplexer regulärer Ausdruck mehr Zeit brauchen, da es mehr Arbeit zu tun.

Sie haben auch ein Browser-Implementierungsproblem Eintrübung Angelegenheiten. Kurz eine zeitlich Schleife zu schreiben, die Zeit für jeden Browser genommen zu messen jede Art von Detektion mit Ihren spezifischen Bedürfnissen zu tun, kann man nicht wirklich eine solide Antwort erhalten kann.

Was schlimmer ist, ist, dass Sie bei jeder Iteration des schlaufen ein neues regulären Ausdruck Objekt erstellen definiert es einmal außerhalb der Schleife, oder es als ein Argument übergeben.

Auch für diese Verwendung, Test ist besser und schneller als Spiel .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top