js如何错位合并两个数组

arr1 = [1,2,3,4,5,6],
arr2 = [1,2,3,4,5,6],
请问有没有什么比较方便的方法,使得两个数组能都错位合并,使得结果arr3 = [1,1,2,2,3,3,4,4,5,5,6,6]

阅读 6.7k
8 个回答

image.png

arr1 = [1, 2, 3, 4, 5, 6]
arr2 = [10, 20, 30, 40, 50, 60]

arr1.reduce((a, b, i) => (a.splice(i*2, 0, b), a), [...arr2])

大概是这样

Array.from({length: Math.max(arr1.length, arr2.length)}, (_, i) => [arr1[i], arr2[i]]).flat()

如果有过滤需求后面再加上

.filter(v => typeof v !== 'undefined')
function merge() {
  const arr1 = [1, 2, 3, 4, 5, 6];
  const arr2 = [1, 2, 3, 4, 5, 6];
  const maxCount = Math.max(arr1.length, arr2.length);
  let count = 0;
  const res = [];
  while (count < maxCount) {
    arr1[count] && res.push(arr1[count]);
    arr2[count] && res.push(arr2[count]);
    count++;
  }
}
新手上路,请多包涵
arr1.map((value, index)=>arr3.push(value, arr2[index]))
function merge(a, b) {
    var ret = [];
    var length = Math.max(a.length, b.length);
    for (var i = 0; i < length; ++i) {
        if (a.hasOwnProperty(i)) ret.push(a[i]);
        if (b.hasOwnProperty(i)) ret.push(b[i]);
    }
    return ret;
}
console.dir(merge(arr1, arr2));
此方法会改变原数组,如果不想改变,可在方法开头copy一份数组。
const merge = (arr1, arr2) => {
  const arr3 = []
  while (arr1.length > 0 || arr2.length > 0) {
    if (arr1.length) {
      arr3.push(arr1.shift())
    }
    if (arr2.length) {
      arr3.push(arr2.shift())
    }
  }
  return arr3
}

function zip(target, ...arrs) {
return target.map((item, index) => [item, ...arrs.map((arr) => arr[index])]);
}

新手上路,请多包涵
    var arr1 = [1,2,3,4,5];
    var arr2 = [1,2,3,4,5];
    var a = arr1.concat(arr2);
    console.log(a);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题