我有一个数组:
[1, 2, 3, 4, 5]
我想在每个数组元素之间注入一些东西(比如0
),如下所示:
[1, 0, 2, 0, 3, 0, 4, 0, 5]
注入的元素可以是任何东西:数字,字符串,JSX元素等。
有优雅的方法吗?
答案 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);