JavaScript имеет две довольно мощные и популярные функции среди разработчиков: Split and Join. Эти две функции могут поменять как строки, так и типы массива, то есть массивы могут быть сериализованы на строки, и наоборот. Мы можем полностью сыграть эти две функции. Давайте рассмотрим некоторые интересные приложения здесь. Во -первых, давайте представим эти две функции:
String.prototype.split (разделитель, предел)
Сепаратор делит строку на массив, а дополнительное предел параметра определяет максимальную длину сгенерированного массива.
"85 @@ 86 @@ 53" .split ('@@'); // ['85', '86', '53']; "banana" .split (); //["банан"]; // (Спасибо Питер (: :) «Президент, Сенат, Дом» .split (',', 2); // [президент »,« Сенат »] Array.prototype.join (разделитель)Необязательный сепаратор параметров преобразует массив в строку. Если сепаратор не предоставлен, то запятая будет использоваться в качестве значения параметра (точно так же, как функция ToString в массиве).
[«Слизняки», «Улитки», «Хвосты щенка собаки»]. Join ('и'); // «Слизняки и улитки и хвосты собаки щенков» [«Гиганты», 4, «Рейнджерс», 1] .join (''); // «Гиганты 4 Рейнджерс 1» [1962,1989,2002,2010] .join ();Вот некоторые из приложений:
заменяем
Эта простая функция не похожа на функцию собственной замены, ее можно заменить в качестве глобальной подстроки без использования регулярных выражений.
String.prototype.replaceall = function (find, rypredwith) {return this.split (find) .join (replacewith); } "Человек и план" .replaceall ('the', 'a'); // "Человек и план"Для небольших строк он немного слабее, чем нативные функции, замененные одним символом (здесь относится к двум дополнительным функциям регулярного выражения), но при Mozilla, если символ превышает 2 или 3 символа, эта функция использования работает быстрее, чем регулярное выражение.
Случаи
Эта функция может соответствовать количеству подстроков. Более того, такая функция очень прямая и не требует регулярности.
String.prototype.occurences = function (find, matchcase) {var text = this; Matchcase || (find = find.tolowerCase (), text = text.tolowercase ()); return text.split (find) .length-1; } document.body.innerhtml.occurences ("div"); // Google Home Page имеет 114document.body.innerhtml.occurences ("/div"); // Google Home Page имеет 57 «Англия привлекает своих инженеров». // 2 сноваЭта функция заимствована из Prototype.js:
String.prototype.repeat = function (times) {return new массив (times+1) .join (this); } "Go" .repeat (3) + "Giants!"; // "Иди иди, Гиганты!"Прелесть этого заключается в использовании функции соединения. Основное внимание уделяется этому значению параметра сепаратора, а затем этот базовый массив содержит только некоторые неопределенные значения значения. Чтобы проиллюстрировать это более ясно, давайте воссоздаем приведенный выше пример:
[неопределенные, неопределенные, неопределенные, неопределенные] .join ("Go") + "ГигантыПомните, что перед соединением каждый элемент массива будет преобразован в строку (вот пустая строка). Применение этой повторной функции является одним из немногих невозмутимых применений, которые определяют массивы через массивные литералы.
Используйте ограниченный параметр
Я редко использую предел необязательных параметров функции разделения. Вот пример, использующий этот предел:
var getDomain = function (url) {return url.split ('/', 3) .join ('/');} getDomain ("http://www.aneventapart.com/2010/seattle/slides/"); // "http: //www.anev entapart.com "GetDomain (" https://addons.mozilla.org/en-us/firefox/bookmarks/ "); //" https://addons.mozilla.org "Изменить числовые члены
Если мы смешиваем завсегдатавших, присоединиться и разделить может легко изменить члены массива. Однако эта функция не так сложна, как воображается. Его основная функция - удалить строку, указанную перед каждым членом данного массива.
var eweweadmembers = function (arr, removeStr) {var regex = regexp ("[,]?" + RemoveStrest); return arr.join (). Split (regex) .slice (1);} // Сделайте массив, содержащий только числовую часть номеров полетов BeawheadMems ([«BA015», «BA129», «BA130»]; // [«015», «129», «130»]К сожалению, эта функция терпит неудачу в IE, потому что они ошибочно удаляют первого пустого элемента с Split. Теперь давайте поправляем эту функцию:
var eweweadmembers = function (arr, removeStr) {var regex = regexp ("[,]?" + RemoveStrest); var result = arr.join (). Split (regex); Вернуть результат [0] && result || result.slice (1); // т.е. обходной путь}Почему мы используем эту технику вместо функции карты массива в Emascript 5?
["ba015", "ba129", "ba130"]. Map (function (e) {return e.replace ('ba', '')}); // ["015", "129", "130"]В фактическом использовании, когда это возможно, я обычно использую нативную функцию карты (недоступна ниже, т.е. <9). Следующий пример используется только в качестве инструмента обучения, но стоит отметить, что синтаксис призывного соединения и разделения является более кратким и прямым. Самое интересное, что это также очень эффективно, особенно для небольших массивов, что более эффективно в FF и Safari. Для больших массивов функции карты более подходят. (Во всех браузерах) будет меньше функциональных вызовов для соединения и разделения функций.
// Тест 1-Использование join/splitvar arr = [], x = 1000; while (x--) {arr.push ("ba" + x);} var eweecheadmembers = function (arr, regex) {return arr.join (). split (regex) .slice (1);} var regex = regexp ("[,]? 1000; while (y--) {gearcheadmembers (arr, regex);}; +новая дата-таймер; // ff 3.6 733ms // ch 7 464ms // sa 5 701ms // ie 8 1256ms // test 2-function functionvar arr = [], x = 1000; Дата, y = 1000; while (y--) {arr.map (function (e) {return e.replace ('ba', '')});}+новая дата-таймер; // ff 3.6 2051ms // cr 7 732ms // sf 5 1520ms // ie 8 (не поддерживается)Соответствие рисунка
Массивы должны постоянно выполнять сопоставление рисунков, но струны нет. Регулярные выражения могут использоваться в струнах, но не в массивах. Сила преобразования массивов в строки для сопоставления схем далеко за пределами масштаба этой статьи. Давайте посмотрим на простое применение этого.
Предположим, что результаты гонки гонки должны быть спасены на массиве. Цель состоит в том, чтобы поместить участников и время их записи в массив. Мы можем использовать соединение и регулярные выражения, чтобы проверить, правильным ли этот шаблон хранения. Следующий код должен выяснить пропущенное время записи, искав два последовательных имена.
var results = ['sunil', '23: 09 ',' bob ', '22: 09', 'carlos', 'mary', '22: 59 ']; var baddata = Results.join (', '). Match (/[a-za-z]+, [a-za-z]+/g); baddata; // ["Карлос, Мэри"]