数组第n个索引处的JavaScript插入元素,另一个数组中的插入元素

时间:2019-04-22 13:34:31

标签: javascript arrays

我有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的很棒!预先谢谢你。

4 个答案:

答案 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)

您可以使用forEachsplice()插入元素来遍历较小的数组。

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)));