0

配列にデータを入力しようとしています:

var array2 = ["a", "b", "c"];

値が各元の値を区切るように、いくつかの乱数/値を使用します。ただし、次のような for ループを使用します。

for (var am = 1; am < array2.length; am+2) {
   array2.splice(am, 0, undefined);
}

各スプライスでarray2の長さが変化し、無限ループが発生するため、ブラウザーがフリーズする原因となるため、次の方法を試しました。

var l = array2.length;

for(var i = 1; i < l; i+2) {
   array2.splice(i, 0, undefined);
}

今、私は何が起こっているのかわかりません。私lは再び突然変異していると思います。

i最初のスプライス後の array2 は次のようになるため、2 つ進める必要があります。

["a", undefined, "b", "c"];

ただし、i = 3式を設定したi < lので、唯一の説明は、それlが再び変化していることです。

どんな説明でも大歓迎です。コードをどのように進めたいかの最終結果は次のとおりです。

array2 = ["a", undefined, "b", undefined, "c"];
4

3 に答える 3

3
for (var am = 1; am < array2.length; am+2) {

am実際にはその行でインクリメントしていません。次のように変更します。

for (var am = 1; am < array2.length; am+=2) {

+=手段を使うam = am + 2

于 2013-01-11T11:11:00.997 に答える
1

あなたはこれを試すことができます:

var array2 = ["a", "b", "c"];

var l = array2.length;

// Stop 1 item before the end and set steps of 1 item
for(var i = 0; i < (l - 1); ++i) {
   // You inserting starting from index 1 and move 2 items ahead for each element
   array2.splice(1 + (i * 2), 0, undefined);
}
于 2013-01-11T11:18:50.190 に答える
0

あなたはそれを行うことができます:

var array2 = ["a", "b", "c"],
    length = array2.length,
    output = [];

for ( var i = 0; i < length; i++ ) {
  output.push(array2[i]);
  if ( i < length - 1 ) {
    output.push(undefined);
  }
}

// output:
// ["a", undefined, "b", undefined, "c"]
于 2013-01-11T11:11:08.163 に答える