Pergunta

Eu tenho essa Array.prototype na minha página e parece estar sugando uma grande quantidade de tempo de processamento:

        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;
        }
Foi útil?

Solução

Antes de tudo, você sabe que você não tem que ter o "*" em ambos os lados, certo? Uma expressão regular já por padrão irá corresponder a qualquer lugar dentro da string. Em segundo lugar, se você está apenas à procura de uma string constante, e não precisa usar qualquer uma das coisas avançadas que as expressões regulares oferecem, então é definitivamente mais rápido para uso .indexOf(). Além disso, de que maneira você não terá que se preocupar escapar caracteres que têm significado especial.

Outras dicas

As expressões regulares podem variar muito. Imagino que um simples, bem trabalhada trabalho regular expressão força tão rápido ou mais rápido do que indexOf (). Por outro lado, uma expressão regular complexa que precisa de mais tempo, uma vez que está fazendo mais trabalho.

Você também tem uma implementação navegador assuntos questão turvação. Curto de escrever um loop cronometrado para medir o tempo necessário para cada navegador para fazer cada tipo de detecção com as suas necessidades específicas, você não pode realmente obter uma resposta sólida.

O que é pior é que você criar um novo objeto de expressão regular em cada iteração do loop- definir uma vez, fora do loop, ou passá-lo como um argumento.

Além disso, para este uso, test é melhor e mais rápido do que jogo .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top