在每个值的中间填充JavaScript数组

时间:2013-01-11 11:08:27

标签: javascript arrays splice

我正在尝试填充数组:

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推进为2,因为第一次拼接后的array2变为:

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

但是,由于i = 3我设置了表达式i < l,唯一的解释是l再次发生变化。

欢迎任何解释。我希望代码进行的最终结果是:

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

3 个答案:

答案 0 :(得分:3)

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

您实际上并没有在该行中增加am。将其更改为:

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

使用+=表示am = am + 2

答案 1 :(得分: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);
}

答案 2 :(得分: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"]