如何在数组中的每个元素之间注入一个元素?

时间:2015-12-10 11:04:27

标签: javascript arrays

我有一个数组:

[1, 2, 3, 4, 5]

我想在每个数组元素之间注入一些东西(比如0),如下所示:

[1, 0, 2, 0, 3, 0, 4, 0, 5]

注入的元素可以是任何东西:数字,字符串,JSX元素等。

有优雅的方法吗?

4 个答案:

答案 0 :(得分:2)

最安静的方法是简单地创建一个新数组:

var arr    = [1, 2, 3, 4, 5],
    newArr = [];
for (var i = 0; i < arr.length; i++) {
    newArr.push(arr[i], 0);
}

一种不那么理智的方式将涉及大量使用Array.splice

答案 1 :(得分:2)

一种荒唐的做法。我只是喜欢reduce

var arr = [1, 2, 3, 4, 5].reduce(function (p, c, i, a) {
  return i < a.length - 1 ? p.concat(c, 0) : p.concat(c);
}, []);

如果注入的元素不同,只需将代码包装在函数中即可。

function stuffer(arr, el) {
  return arr.reduce(function (p, c, i, a) {
    return i < a.length - 1 ? p.concat(c, el) : p.concat(c);
  }, []);
}

stuffer(arr, '<p>Hi</p>');

答案 2 :(得分:0)

加入并拆分

var arr = [1, 2, 3, 4, 5];
alert( arr.join(',0,').split(',') );

可以重构为方法

function insertBetweenAllElements( arr, newElement )
{
   return arr.join(',' + newElement  + ',').split(',')
}
var updatedArr = insertBetweenAllElements( arr, '0' ) 
alert( updatedArr );

添加对各种数据(int,str等)的支持

function insertBetweenAllElements( arr, newElement )
{
   arr.forEach( function( value, index, arr ){ arr.splice(index+index, 0, newElement ); } )
   return arr.slice(1,arr.length);
}
var updatedArr = insertBetweenAllElements( arr, '0' ) 
alert( updatedArr );

答案 3 :(得分:0)

我不确定这是否优雅 - 但它有效(并且它已经到位,此代码中没有临时数组受到损害或使用)

var array = [1,2,3,4,5];
function insertBetween(arr, val) {
    arr.map(function(e, i) { if (i) arr.splice(i * 2 - 1, 0, val) }); 
}
insertBetween(array, 0);