js如何错位合并两个数组

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]

js如何错位合并两个数组

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