2

区切り記号を使用して数値をフォーマットする JS スクリプトを作成しようとしています,が、ロジックの実装で問題が発生しています。

ここの値を変更しarr1ています。

これが今回使用しているJSコードです -

<script>
var arr1 = [1,2,3,4,5,6,7];
arr1.reverse();
var i = 1;
var tempArr = new Array();
for( i; i <= arr1.length ; i++ ) {
    if( i%3 == 0 ) {
        tempArr[i-1] = arr1[i-1];
        tempArr[i] = ',';
        i++;
    }
    else {
        tempArr[i-1] = arr1[i-1];
    }
}
console.log(tempArr.reverse().join(''));
</script>

期待される出力 ``現在の間違った出力

1,234           =>  ,234 
12,345          =>  1,345
123,456         =>  ,12,456
1,234,567       =>  ,23,567

今回はコーディングを学んでいるので、スニペットで間違っていること(論理部分)を教えてください。

4

4 に答える 4

3

これは、メモ付きの簡単なゴーオーバーです。

var arr1 = [1,2,3,4,5,6,7];
arr1.reverse();
var tempArr = [];
for( var i = 0, l = arr1.length; i < l ; i++ ) {
    if( i % 3 == 0 && i != 0) {
        tempArr.push(',');
    }
    tempArr.push(arr1[i]);
}
console.log(tempArr.reverse().join(''));

最初の 2 つの微調整は速度のためです。「for」ループでは、反復ごとに配列の長さを比較しないでください。一部のブラウザは、チェックするたびに長さを再計算するため、これを行うとパフォーマンスが非常に低下します。また、JS 配列はゼロ インデックスであるため、ゼロ インデックスでループを開始すると、少し混乱しにくくなります。を使用した配列の構築new Arrayは、配列リテラル ( []) を使用するよりも遅くなります。

次のいくつかの微調整により、コードが単純化されました。数値が % 3 で、最初のループでない場合は、コンマを挿入します。いずれの場合も、その反復によって表される数値を追加します。

それが理にかなっているかどうか教えてください。

于 2013-05-21T06:18:44.730 に答える