我有2个Javascript数组:
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
['a', 'b', 'c']
我需要在第一个数组的第4个或第n个索引处将第二个数组的元素插入第一个数组,结果:
['a', '1', '2', '3', '4', 'b', '5', '6', '7', '8', 'c', '9', '10', '11', '12']
n必须是一个参数,因此我可以将n移至第5个位置,或在需要时移至第3个位置。
任何解决方案表示赞赏。 ES6的很棒!预先谢谢你。
答案 0 :(得分:1)
使用带有迭代器的forEach
,如下所示:
let arr1 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];
let arr2 = ['a', 'b', 'c'];
let index = 0;
arr2.forEach(function(v){
arr1.splice(index, 0, v);
index += 5;
});
console.log(arr1);
现在介绍一下ES6,这是我的写法:
let arr1 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];
let arr2 = ['a', 'b', 'c'];
let index = 0;
Array.from(arr2).forEach((v)=>{
arr1.splice(index, 0, v);
index += 5;
});
console.log(arr1);
答案 1 :(得分:1)
您可以使用forEach
和splice()
插入元素来遍历较小的数组。
let arr1 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
let arr2 = ['a', 'b', 'c']
function insertArr(arr1,arr2,n){
arr1 = arr1.slice();
arr2.forEach((a,i) => {
arr1.splice(i*n+i,0,a);
})
return arr1;
}
console.log(insertArr(arr1,arr2,4))
答案 2 :(得分:1)
尝试一下
b.forEach((itm, indx) => a.splice(Math.ceil(a.length/b.length)*indx, 0, itm));
答案 3 :(得分:1)
使用Array.flatMap()
迭代第二个数组,使用Array.slice()
从第一个数组中取出相应的序列,然后使用点差将其与当前元素合并。将Array.concat()
与切片一起使用以添加剩余的项目(如果有)。
const fn = (n, added, target) =>
added.flatMap((el, i) => [el, ...target.slice(n * i, n * (i + 1))])
.concat(target.slice(n * added.length))
const arr1 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
const arr2 = ['a', 'b', 'c']
console.log(JSON.stringify(fn(3, arr2, arr1)));
console.log(JSON.stringify(fn(4, arr2, arr1)));
console.log(JSON.stringify(fn(5, arr2, arr1)));