JavaScript에는 개발자들 사이에 두 가지 강력하고 인기있는 기능이 있습니다 : Split and Join. 이 두 기능은 문자열과 배열 유형을 모두 교환 할 수 있습니다. 즉, 배열은 문자열로 직렬화 될 수 있으며 그 반대도 마찬가지입니다. 우리는이 두 기능을 완전히 재생할 수 있습니다. 여기에서 몇 가지 흥미로운 응용 프로그램을 살펴 보겠습니다. 먼저이 두 기능을 소개하겠습니다.
string.prototype.split (분리기, 한계)
분리기는 문자열을 배열로 나누고 선택적 매개 변수 한계는 생성 된 배열의 최대 길이를 정의합니다.
"85 @@ 86 @@ 53".split ( '@@'); // [ '85', '86', '53']; "바나나".split (); //["바나나"]; // (Peter (-) ""상원, 상원, 하원 ".split ( ',', 2); // ["대통령 ","상원 "] array.prototype.join (분리기)
선택적 매개 변수 분리기는 배열을 문자열로 변환합니다. 분리기가 제공되지 않으면 쉼표는 매개 변수 값으로 사용됩니다 (배열의 토스트 링 함수와 마찬가지로).
[ "슬러그", "달팽이", "강아지의 꼬리"]. 가입 ( 'and'); // "슬러그와 달팽이와 강아지의 꼬리"[ '거인', 4, '레인저스', 1] .join ( ''); // "거인 4 레인저스 1"[1962,1989,2002,2010] .join ();
다음은 몇 가지 응용 프로그램입니다.
교체
이 간단한 기능은 기본 대체 기능과 같지 않으며 정규 표현식을 사용하지 않고도 글로벌 하위 문자로 교체 할 수 있습니다.
string.prototype.replaceall = function (find, relpacewith) {return this.split (find) .join (replaceWith); } "사람과 계획".replaceall ( 'the', 'a'); // "사람과 계획"작은 문자열의 경우, 단일 문자로 대체 된 기본 함수보다 약간 약하지만 (여기서는 정규 표현식의 두 가지 추가 함수를 나타냅니다) Mozilla에서는 문자가 2 또는 3자를 초과하면이 사용 기능은 일반 표현보다 빠르게 실행됩니다.
발생
이 기능은 하위 문자 수를 일치시킬 수 있습니다. 또한, 이러한 종류의 기능은 매우 직접적이며 규칙 성이 필요하지 않습니다.
String.prototype.occurences = function (find, matchcase) {var text = this; 성냥개비 || (find = find.tolowercase (), text = text.tolowercase ()); return text.split (find) .length-1; } document.body.innerhtml.occurences ( "div"); // Google 홈페이지는 114document.body.innerhtml.occurences ( "/div")를 가지고 있습니다. // Google 홈페이지는 57 개의 "England가 엔지니어들과 참여". // 2repeat이 기능은 프로토 타입에서 빌려옵니다 .js :
string.prototype.repeat = function (times) {return new Array (Times+1) .join (this); } "go".repeat (3) + "자이언츠!"; // "가서 자이언츠 가라!"그것의 아름다움은 조인 기능을 사용하는 데 있습니다. 초점은이 분리기 매개 변수 값에 중점을두고 있으며이 기본 배열에는 정의되지 않은 값만 포함됩니다. 이것을보다 명확하게 설명하려면 위의 예를 다시 만들어 봅시다.
[정의되지 않은, 정의되지 않은, 정의되지 않은, 정의되지 않은] .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 eeadmembers = function (arr, removest) {var regex = regexp ( "[,]?" + removest); RETURN ARR.join (). split (regex) .slice (1);} // 비행 숫자의 숫자 부분 만 포함 된 배열을 만듭니다.불행히도,이 기능은 Split에서 첫 번째 빈 멤버를 잘못 제거하기 때문에 IE에서 실패합니다. 이제이 기능을 수정하겠습니다.
var eeadmembers = function (arr, removest) {var regex = regexp ( "[,]?" + removest); var result = arr.join (). split (regex); 반환 결과 [0] && result || 결과 .Slice (1); // 즉, 해결 방법}EmaScript 5의 배열의 맵 기능 대신이 기술을 사용하는 이유는 무엇입니까?
[ "ba015", "ba129", "ba130"]. map (function (e) {return e.replace ( 'ba', '' '}); // [ "015", "129", "130"]실제로 사용하면 가능하면 일반적으로 기본 맵 함수를 사용합니다 (IE <9 아래에서 사용할 수 없음). 다음 예제는 학습 도구로만 사용되지만 조인 및 스플릿의 호출 구문이 더 간결하고 직접적이라는 점에 주목할 가치가 있습니다. 가장 흥미롭게도, 특히 FF 및 사파리에서 더 효율적인 작은 어레이의 경우 매우 효율적입니다. 큰 배열의 경우 맵 함수가 더 적합합니다. (모든 브라우저에서), 결합 및 분할 함수에 대한 기능 호출이 적습니다.
// test 1- join/splitvar arr = [], x = 1000; while (x-) {arr.push ( "ba" + x);} var beeweadmembers = function (arr, regex) {return arr.join (). split (regex) .slice (1);} var regex = regexp ( "["); ba '); " +'ba ') 1000; while (y-) {참수 멤버 (arr, regex);}; +새로운 날짜-타이머; // ff 3.6 733ms // ch 7 464ms // SA 5 701ms // 예 : 8 1256ms // 테스트 2- 기본 MAP 기능 바르 ar = [], 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 (지원되지 않음)패턴 매칭
배열은 지속적으로 패턴 일치를 수행해야하지만 문자열은 그렇지 않습니다. 정규 표현식은 문자열에서 사용할 수 있지만 배열에는 사용할 수 없습니다. 패턴 일치를 위해 배열을 문자열로 변환하는 힘은이 기사의 범위를 훨씬 뛰어 넘습니다. 간단한 적용을 살펴 보겠습니다.
레이스의 레이스 결과를 배열에 저장해야한다고 가정하십시오. 목적은 참가자와 녹음 시간을 배열에 번갈아 가도록하는 것입니다. 우리는 Join과 일반 표현식을 사용 하여이 저장 패턴이 올바른지 확인할 수 있습니다. 다음 코드는 두 개의 연속 이름을 찾아 놓친 레코드 시간을 찾는 것입니다.
var results = [ 'sunil', '23 : 09 ','bob ', '22 : 09', 'Carlos', 'Mary', '22 : 59 ']; var baddata = results.join (', '). // [ "Carlos, Mary"]