回答:
アラートの順序が重要な場合は、これを使用します。
for (var i = 0; i < str.length; i++) {
alert(str.charAt(i));
}
アラートの順序が重要でない場合は、これを使用します。
var i = str.length;
while (i--) {
alert(str.charAt(i));
}
[]
特定の位置にある文字を取得するためのtheの使用は、IE <9ではサポートされていません
charAt
サロゲートペアがなく、問題に対処するためのUCS-2の日から残っています。新しい機能codepointAt
がJavaScriptに追加され、フレンドリーなプーの山を正しく処理します。Javaにもあると思います。
それはおそらく解決された以上のものです。別のシンプルなソリューションで貢献したいだけです:
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);
});
[...text].forEach(console.log)
forEach()
インデックスと配列を2番目と3番目の引数として渡します。私はそれをログに記録し
for (let c of [...text]) { console.log(c) }
let c of text
すでに仕事をしています。
純粋なJavaScriptで可能な解決策の1つ:
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]);
}
for ... ofは、イテレータ用の新しいES6です。最近のほとんどのブラウザでサポートされています。見た目がより魅力的で、タイプミスをしにくくなります。これを本番アプリケーションで使用する場合は、おそらくBabelのようなトランスパイラーを使用する必要があります。
let result = '';
for (let letter of str) {
result += letter;
}
機能的アプローチ。Airbnb承認。この方法でこれを行う最大の欠点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];
}
機能アプローチ、これは良いことです。ただし、マップはそのために使用するためのものではありません。配列内の値を変更する必要がある場合に使用する必要がありますが、そうではありません。
// ES6 version.
var result = '';
str.split('').map(letter => {
result += letter;
});
または
let result = '';
str.split('').map(function(letter) {
result += letter;
});
for
ループが2番目に遅く、実際for...of
には最速でした(約3倍の速さfor
)。
for
ループはわずかに高速です。
Unicode BMP(Basic Multilingual Plane)の外側の文字列に文字がある場合はいつでも壊れるので、ここでの回答のすべてではないにしてもほとんどが間違っています。つまり、すべての絵文字が壊れます。
JavaScriptはすべての文字列にUTF- 16 Unicodeを使用します。UTF-16では、BMPを超える文字は「サロゲート ペア」と呼ばれる2つの部分から構成され、ここでの回答のほとんどは、そのようなペアの各部分を単一の文字としてではなく個別に処理します。
少なくとも2016年以降の最新のJavaScriptの1つの方法は、新しい文字列イテレータを使用することです。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);
})
もう1つの解決策...
var strg= 'This is my string';
for(indx in strg){
alert(strg[indx]);
}
for..of
ループを使用する方が高速ですfor (let ch of t) { alert(ch) }
短いコードやワンライナーを記述する必要がある場合は、次の「ハック」を使用します。
'Hello World'.replace(/./g, function (char) {
alert(char);
return char; // this is optional
});
これは改行を数えないため、良いことにも悪いことにもなります。あなたはどの改行を含める場合は、交換してください:/./
と/[\S\s]/
。他のワンライナーは、おそらく使用を見ることが.split()
いる多くの問題を抱えています
forEach
呼び出しの関数に渡された追加のパラメーターとで送信されreplace
たパラメーターにアクセスしたいときだけです。ASCIIを使用していることがわかっている場合は、まだいくつかの使用例があると思いますsplit
。すばらしい答えです!
u
フラグと一緒にg
フラグがない限り、これはUnicodeの問題を考慮に入れないと思いましたか?テストしただけでOKでした。
短い答え:Array.from(string)
おそらくあなたが望んでいるものを与え、それは単なる配列なのでそれで何でも繰り返すことができます。
では、次の文字列で試してみましょうabc|⚫️\n⚪️|👨👩👧👧
。
コードポイントは次のとおりです。
97
98
99
124
9899, 65039
10
9898, 65039
124
128104, 8205, 128105, 8205, 128103, 8205, 128103
そのため、一部の文字には1つのコードポイント(バイト)があり、一部には2つ以上のコードポイントがあり、追加のテストのために改行が追加されています。
したがって、テスト後は2つの方法があります。
string = "abc|⚫️\n⚪️|👨👩👧👧"
console.log({ 'string': string }) // abc|⚫️\n⚪️|👨👩👧👧
console.log({ 'string.length': string.length }) // 21
for (let i = 0; i < string.length; i += 1) {
console.log({ 'string[i]': string[i] }) // byte per byte
console.log({ 'string.charAt(i)': string.charAt(i) }) // byte per byte
}
for (let char of string) {
console.log({ 'for char of string': char }) // character groups
}
for (let char in string) {
console.log({ 'for char in string': char }) // index of byte per byte
}
string.replace(/./g, (char) => {
console.log({ 'string.replace(/./g, ...)': char }) // byte per byte
});
string.replace(/[\S\s]/g, (char) => {
console.log({ 'string.replace(/[\S\s]/g, ...)': char }) // byte per byte
});
[...string].forEach((char) => {
console.log({ "[...string].forEach": char }) // character groups
})
string.split('').forEach((char) => {
console.log({ "string.split('').forEach": char }) // byte per byte
})
Array.from(string).forEach((char) => {
console.log({ "Array.from(string).forEach": char }) // character groups
})
Array.prototype.map.call(string, (char) => {
console.log({ "Array.prototype.map.call(string, ...)": char }) // byte per byte
})
var regexp = /(?:[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g
string.replace(regexp, (char) => {
console.log({ 'str.replace(regexp, ...)': char }) // character groups
});
を使用して、文字列に含まれる個々のUnicodeコードポイントを反復処理できるようになりましたString.prototype[@@iterator]
。これは、よく知られているシンボルタイプSymbol.iterator
(配列のようなオブジェクトのデフォルトの反復子String
)(この場合)の値を返します。
コード例:
const str = 'The quick red 🦊 jumped over the lazy 🐶! 太棒了!';
let iterator = str[Symbol.iterator]();
let theChar = iterator.next();
while(!theChar.done) {
console.log(theChar.value);
theChar = iterator.next();
}
// logs every unicode character as expected into the console.
これは、絵文字やローマ字以外の文字などのレガシー構造をトリップするUnicode文字で機能します。
for ... of
、文字列に対してループを使用することで、より簡単に行うことができます。これは、イテレータにアクセスするための構文シュガーです。
キーワードで使用できるようになりました。
var s = 'Alien';
for (var c in s) alert(s[c]);
in
は言語の正当な部分です。物事を適切に使用してください。記事では、in
アルファキーを数字キーと同じように解釈するよう注意しています。そう?たぶんそれがあなたの望みです。他の方法では、アルファキーが誤って無視されるとも言えます。イモ、of
正しい振る舞いをしています。JS配列では、アルファキーのない要素にもキーがあります。数値キーです。:私のコンソールで、JS「正しく」扱い数字キーと同じアルファキーを>const arr = ['a', 'b'] >arr.test = 'hello' >arr 0: "a" 1: "b" test: "hello" length: 2
今日のJavaScriptでは、
Array.prototype.map.call('This is my string', (c) => c+c)
明らかに、c + cはcで何をしたいかを表します。
これは戻ります
["TT", "hh", "ii", "ss", " ", "ii", "ss", " ",
"mm", "yy", " ", "ss", "tt", "rr", "ii", "nn", "gg"]
[...'This is my string'].map((c)=>c+c)
これは古いブラウザで動作し、💩のようなUTF-16文字で動作するはずです。
これが最も互換性のあるソリューションであるはずです。ただし、for
ループよりもパフォーマンスが低下します。
var str = 'My String 💩 ';
var regEx = /(?:[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g
str.replace(regEx, function (char) {
console.log(char)
});
お役に立てれば!
あなたはできる単一の文字にアクセスしstr.charAt(index)
たりstr[index]
。ただし、後者の方法はECMAScriptの一部ではないため、前者の方法を使用することをお勧めします。
各キャラクターをアニメートしたい場合は、それをspan要素でラップする必要があるかもしれません。
var $demoText = $("#demo-text");
$demoText.html( $demoText.html().replace(/./g, "<span>$&</span>").replace(/\s/g, " "));
これがそれを行う最良の方法だと私は思います、そしてスパンを処理します。(たとえば、TweenMaxを使用)
TweenMax.staggerFromTo($ demoText.find( "span")、0.2、{autoAlpha:0}、{autoAlpha:1}、0.1);
このコードを試してください
function myFunction() {
var text =(document.getElementById("htext").value);
var meow = " <p> <,> </p>";
var i;
for (i = 0; i < 9000; i++) {
text+=text[i] ;
}
document.getElementById("demo2").innerHTML = text;
}
</script>
<p>Enter your text: <input type="text" id="htext"/>
<button onclick="myFunction();">click on me</button>
</p>
for(const c of str) { ... }
ます。その詳細については、以下で詳しく説明しますが、十分に賛成されていません。PS:@ARJUNのリンクが機能しません。