O JavaScript possui duas funções bastante poderosas e populares entre os desenvolvedores: dividir e participar. Essas duas funções podem trocar os tipos de cordas e matrizes, ou seja, as matrizes podem ser serializadas em cordas e vice -versa. Podemos jogar completamente essas duas funções. Vamos explorar alguns aplicativos interessantes aqui. Primeiro, vamos apresentar essas duas funções:
String.prototype.split (separador, limite)
O separador divide a string em uma matriz e o limite opcional de parâmetro define o comprimento máximo da matriz gerada.
"85 @@ 86 @@ 53" .Split ('@@'); // ['85', '86', '53']; "banana" .split (); //["banana"]; // (obrigado Peter (-:) "Presidente, Senado, Câmara" .Split (',', 2); // ["Presidente", "Senado"] Array.prototype.join (separador)O separador de parâmetro opcional converte a matriz em uma string. Se o separador não for fornecido, a vírgula será usada como o valor do parâmetro (assim como a função de tostragem da matriz).
["Slugs", "Snails", "Puppy Dog's Tails"]. Junte -se ('e'); // "lesmas e caracóis e caudas de cachorro" ['Giants', 4, 'Rangers', 1] .Join (''); // "Giants 4 Rangers 1" [1962,1989.2002.2010] .Join ();Aqui estão alguns dos aplicativos:
ReplaceAll
Essa função simples não é como a função de substituição nativa, ela pode ser substituída como uma substring global sem usar expressões regulares.
String.prototype.Replaceall = function (encontre, substitua) {return this.split (find) .Join (replyTwith); } "O homem e o plano" .Replaceall ('the', 'A'); // "Um homem e um plano"Para pequenas cordas, é um pouco mais fraco que as funções nativas substituídas por um único caractere (aqui se refere a duas funções adicionais de uma expressão regular), mas sob Mozilla, se o caractere exceder 2 ou 3 caracteres, essa função de uso funciona mais rapidamente que a expressão regular.
Ocorrências
Esta função pode ser correspondente ao número de substringas. Além disso, esse tipo de função é muito direto e não requer regularidade.
String.prototype.occurences = function (encontre, matchcase) {var text = this; MatchCase || (find = find.TolowerCase (), text = text.TolowerCase ()); retornar text.split (find) .Length-1; } document.body.innerhtml.ocurências ("div"); // O Google Home Page possui 114document.body.innerhtml.occurences ("/div"); // O Google Home Page possui 57 "Inglaterra envolve seus engenheiros". Ocorrences ("Eng", verdadeiro); // 2 -REPEATEsta função é emprestada do prototype.js:
String.prototype.Repeat = function (times) {return New Array (Times+1) .Join (this); } "vá" .repeat (3) + "gigantes!"; // "Vá Go Giants!"A beleza disso está no uso da função de junção. O foco está nesse valor do parâmetro separador e, em seguida, essa matriz básica contém apenas alguns valores de valor indefinidos. Para ilustrar isso com mais clareza, vamos recriar o exemplo acima:
[indefinido, indefinido, indefinido, indefinido] .Join ("Go") + "GiantsLembre -se de que antes de participar, cada elemento da matriz será convertido em uma string (aqui está uma string vazia). A aplicação dessa função de repetição é uma das poucas aplicações inviáveis que definem matrizes através de literais de matrizes.
Use o parâmetro limite
Eu raramente uso o limite parâmetros opcionais da função dividida. Aqui está um exemplo usando este limite:
var getDomain = function (url) {return url.split ('/', 3) .Join ('/');} getDomain ("http://www.aneventapart.com/2010/seattle/slides/"); // "http: //www.anev Enterpart.com "GetDomain (" https://addons.mozilla.org/en-us/firefox/bookmarks/ "); //" https://addons.mozilla.org "Modificar membros numéricos
Se misturarmos regulares, ingressar e dividir podem modificar facilmente os membros da matriz. No entanto, essa função não é tão difícil quanto imaginada. Sua principal função é remover a string especificada na frente de cada membro da matriz fornecida.
var! Retornar Arr.Join (). Split (regex) .Slice (1);} // Faça uma matriz contendo apenas a parte numérica dos números de vooBeadMembers (["Ba015", "BA129", "BA130"]; // ["015", "129", "130"]
Infelizmente, essa função falha no IE porque eles removem erroneamente o primeiro membro vazio da divisão. Agora vamos corrigir esta função:
var! var resultado = arr.Join (). Split (regex); Resultado de retorno [0] && Resultado || resultado.slice (1); // isto é alternativo}
Por que usamos essa técnica em vez da função do mapa da matriz no EmScript 5?
["BA015", "BA129", "BA130"]. MAP (function (e) {return E.replace ('BA', '')}); // ["015", "129", "130"]Em uso real, quando viável, geralmente uso a função de mapa nativo (não disponível abaixo do IE <9). O exemplo a seguir é usado apenas como uma ferramenta de aprendizado, mas vale a pena notar que a sintaxe de chamada de junção e divisão é mais concisa e direta. O mais interessante é que também é muito eficiente, especialmente para pequenas matrizes, o que é mais eficiente em FF e Safari. Para matrizes grandes, as funções de mapa são mais adequadas. (Em todos os navegadores), haverá menos chamadas de função para participar e dividir funções.
// Teste 1-Usando junção/splitvar arr = [], x = 1000; while (x--) {arr.push ("ba" + x);} var BekeadMembers = function (arr, regex) {return arr.Join (). 1000; while (y--) {ReeDMembers (arr, regex);}; +nova data-Timer; // FF 3.6 733ms // CH 7 464ms // SA 5 701ms // ie 8 1256ms // Test 2-Usando o mapa nativo FUNVAR = [], x = 1000; Data, y = 1000; while (y--) {arr.map (function (e) {return e.replace ('ba', '')});}+nova data-timer; // ff 3.6 2051ms // Cr 7 732ms // sf 5 1520ms // ie 8 (não suportado)Correspondência de padrões
As matrizes precisam executar constantemente a correspondência de padrões, mas as cordas não. Expressões regulares podem ser usadas em cordas, mas não em matrizes. O poder de converter matrizes em cordas para correspondência de padrões está muito além do escopo deste artigo. Vamos dar uma olhada em uma aplicação simples.
Suponha que os resultados da raça da raça precisem ser salvos na matriz. O objetivo é colocar os competidores e seu tempo de gravação alternadamente em uma matriz. Podemos usar expressões de junção e regulares para verificar se esse padrão de armazenamento está correto. O código a seguir é descobrir o tempo recorde perdido, procurando dois nomes consecutivos.
var resulta = ['Sunil', '23: 09 ',' Bob ', '22: 09', 'Carlos', 'Mary', '22: 59 ']; var baddata = resulta.Join (', '). Match (/[a-za-zz]+, [a-za-z]+/g); // ["Carlos, Mary"]