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 变为:

["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 回答