34

for ループの初期化部分で 2 つの変数を宣言することは可能ですか? 文字列の各文字に対して関数を呼び出したい。

for(var i = 0, c = aString.charAt(i); i < aString.length; i++){//problem here: not itterating
    alert("c: "+c)
    func1[typeOfChar(c)]++
}

問題は、文字列がc常に文字列の最初の文字であるという意味で繰り返されていないことです。ちなみに、これalertはトラブルシューティングの目的でした。

好奇心旺盛ですが、宣言時にキーワードがc必要ないのはなぜですか?var

更新: 動作しました。質問するつもりはありませんでしたが、編集がまだ行われていることに気づきました。セミコロンはオプションであるため、使用しないことに慣れています。それらなしで for ループをどのように書くことができますか? 少ないほど単純だと思うので追加しませんか、それとも読みやすさを向上させますか?

4

7 に答える 7

36

cループの開始時に宣言するのではなく、反復ごとに変更したい場合は、試してください

var i,c;
for(i = 0,c=aString.charAt(0); i < aString.length; ++i, c = aString.charAt(i)){
    alert("c: "+c)
    func1[typeOfChar(c)]++
}

価値があるのは、非常に読みやすいコードになるとは思わないため、最初の行に配置することです。

使用しているコンマ演算子に関する情報を次に示します。

また、JavaScript には for ループのブロック スコープがないため、実際には and を現在のスコープの先頭で宣言していることに注意してくださいi(cこれは通常、現在の関数の先頭、またはグローバル スコープの先頭です)。

ここにフィドルがあります:http://jsfiddle.net/maWua/

于 2013-02-04T21:49:46.240 に答える
31

ネストせずに複数のインクリメント変数を for ループに含める簡単な方法。この例では、3 つの変数を宣言しています。

for (var i = 0, j = 1, n = 2; i < 50, n < 50; i = i + 3, j = j + 3, n = n + 3){
    console.log("variable i: " + i);
    console.log("variable j: " + j);
    console.log("variable n: " + n);
}

ここでコードペンを参照してください

于 2017-01-08T18:22:57.460 に答える
1

この場合、は(および不変条件に)cのみ依存し、ループの条件には使用されないため、ループ構成から削除することをお勧めします。i

// (Keep variable hoisting in mind)
for(var i = 0; i < aString.length; i++){
    var c = aString.charAt(i);
    alert("c: "+c);
    // ..
};

(元の問題は、の値を更新していないことcです。)

于 2013-02-04T21:53:22.413 に答える
1

c = aString.charAt(i);ループの本体の内側に配置するだけです。

例えば:

for(var i = 0; i < aString.length; i++){
    c = aString.charAt(i);
    alert("c: "+c);
    func1[typeOfChar(c)]++ 
}
于 2013-02-04T21:56:24.757 に答える
0

ここ:

c = aString.charAt(i)

iは常にゼロであるため、期待どおりに機能しません。初期化は1回発生し、iがに初期化されたばかりのinit中にcharを取得しようとしています0

于 2013-02-04T21:52:08.953 に答える
0

はい、複数varステートメントを使用することで可能であり、成功しました。ただし、初期化ステートメントで 1 回だけ割り当てても変更されません。

ループの前と各ループのターンの後に一度行う必要があります

for (var i=0, c=str.charAt(i); i<str.length; c=str.charAt(++i)) …

または、条件の各ターンの前にそれを行います

for (var i=0, c; c=str.charAt(i), i<str.length; i++) … // comma operator
for (var i=0, c; c=str.charAt(i); i++) … // empty string as condition

または、ループ内で移動するだけです

for (var i=0, c; i<str.length; i++) { c=str.charAt(i); … }
于 2013-02-04T21:53:24.103 に答える