[javascript] Javascript를 사용하여 각 문자를 처리하려면 어떻게해야합니까?

문자열의 각 개별 문자에 알리고 싶지만 어떻게해야하는지 잘 모르겠습니다.

따라서 내가 가지고 있다면 :

var str = 'This is my string';

나는 T, h, i, s 등을 별도로 경고 할 수 있기를 원합니다. 이것은 제가 작업하고있는 아이디어의 시작일 뿐이지 만 각 문자를 개별적으로 처리하는 방법을 알아야합니다.

jQuery를 사용하고 문자열 길이를 테스트 한 후 split 함수를 사용해야 할 수도 있다고 생각했습니다.

아이디어?



답변

경고 순서가 중요한 경우 다음을 사용하십시오.

for (var i = 0; i < str.length; i++) {
  alert(str.charAt(i));
}

경고 순서가 중요하지 않은 경우 다음을 사용하십시오.

var i = str.length;
while (i--) {
  alert(str.charAt(i));
}


답변

아마도 해결 된 것 이상입니다. 다른 간단한 솔루션으로 기여하고 싶습니다.

var text = 'uololooo';

// With ES6
[...text].forEach(c => console.log(c))

// With the `of` operator
for (const c of text) {
    console.log(c)
}

// With ES5
for (var x = 0, c=''; c = text.charAt(x); x++) {
    console.log(c);
}

// ES5 without the for loop:
text.split('').forEach(function(c) {
    console.log(c);
});


답변

순수한 자바 스크립트에서 가능한 해결책은 다음과 같습니다.

for (var x = 0; x < str.length; x++)
{
    var c = str.charAt(x);
    alert(c);
}


답변

각 텍스트를 처리하는 방법 (벤치 마크 포함)

https://jsperf.com/str-for-in-of-foreach-map-2

…에 대한

권위 있는 과 지금까지 가장 성능이 뛰어난 제품 . 성능 결정 알고리즘에서 사용할 계획이거나 브라우저 버전과의 최대 호환성이 필요한 경우이 기능을 사용해야합니다.

for (var i = 0; i < str.length; i++) {
  console.info(str[i]);
}

…의

…의 새로운 ES6입니다 반복자를위한 입니다. 대부분의 최신 브라우저에서 지원합니다. 시각적으로 더 매력적이며 실수를 입력하는 경향이 적습니다. 프로덕션 응용 프로그램 에서이 작업을 수행하려는 경우 Babel 과 같은 변환기를 사용해야합니다 .

let result = '';
for (let letter of str) {
  result += letter;
}

각각

기능적 접근. 에어 비앤비 승인 . 이 방법으로 수행 할 때의 가장 큰 단점 split()은, 문자열의 각 개별 문자를 저장할 새 배열을 만듭니다.

왜? 이것은 우리의 불변의 규칙을 강제합니다. 값을 반환하는 순수한 함수를 다루는 것이 부작용보다 추론하기 쉽습니다.

// ES6 version.
let result = '';
str.split('').forEach(letter => {
  result += letter;
});

또는

var result = '';
str.split('').forEach(function(letter) {
  result += letter;
});

다음은 내가 싫어하는 것입니다.

…에서

for … of와 달리 문자 대신 문자 색인을 얻습니다. 꽤 나쁘게 수행합니다.

var result = '';
for (var letterIndex in str) {
  result += str[letterIndex];
}

지도

좋은 기능 접근. 그러나 map은 그 용도로 사용되지 않습니다. 배열 내부의 값을 변경해야 할 때 사용해야하지만, 그렇지 않습니다.

// ES6 version.
var result = '';
str.split('').map(letter => {
  result += letter;
});

또는

let result = '';
str.split('').map(function(letter) {
  result += letter;
});


답변

유니 코드 BMP (Basic Multilingual Plane) 외부의 문자열에 문자가있을 때마다 문자가 깨질 수 있기 때문에 대부분의 대답이 여기에 해당되지는 않습니다 . 즉, 모든 이모지가 깨질 것입니다 됩니다.

JavaScript는 모든 문자열에 UTF- 16 유니 코드를 사용합니다. UTF-16에서 BMP 이외의 문자는 ” 대리 “이라는 두 부분으로 구성됩니다. ” 여기에서 대부분의 답변은 해당 쌍의 각 부분을 단일 문자가 아닌 개별적으로 처리합니다.

2016 년 이후 현대 JavaScript에서 한 가지 방법은 새로운 String iterator 를 사용하는 것 입니다. 다음은 MDN에서 나온 예제 (거의)입니다.

var string = 'A\uD835\uDC68B\uD835\uDC69C\uD835\uDC6A';

for (var v of string) {
  alert(v);
}
// "A"
// "\uD835\uDC68"
// "B"
// "\uD835\uDC69"
// "C"
// "\uD835\uDC6A"


답변

당신은 이것을 시도 할 수 있습니다

var arrValues = 'This is my string'.split('');
// Loop over each value in the array.
$.each(arrValues, function (intIndex, objValue) {
    alert(objValue);
})


답변

하나 더 해결책 …

var strg= 'This is my string';
for(indx in strg){
  alert(strg[indx]);
}