Merge two arrays with alternating Values

前端 未结 9 2210
南笙
南笙 2020-12-03 14:19

i would like to merge 2 arrays with a different length:

let array2 = [\"a\", \"b\", \"c\", \"d\"];
let array2 = [1, 2];

let outcome = [\"a\",1 ,\"b\", 2, \"         


        
9条回答
  •  盖世英雄少女心
    2020-12-03 15:15

    Here's another way you can do it using destructuring assignment -

    const interleave = ([ x, ...xs ], ys = []) =>
      x === undefined
        ? ys                             // base: no x
        : [ x, ...interleave (ys, xs) ]  // inductive: some x
            
    console.log (interleave ([0, 2, 4, 6], [1, 3, 5])) // [ 0 1 2 3 4 5 6 ]    
    console.log (interleave ([0, 2, 4], [1, 3, 5, 7])) // [ 0 1 2 3 4 5 7 ]
    console.log (interleave ([0, 2, 4], []))           // [ 0 2 4 ]
    console.log (interleave ([], [1, 3, 5, 7]))        // [ 1 3 5 7 ]
    console.log (interleave ([], []))                  // [ ]

    And another variation that supports any number of input arrays -

    const interleave = ([ x, ...xs ], ...rest) =>
      x === undefined
        ? rest.length === 0
          ? []                               // base: no x, no rest
          : interleave (...rest)             // inductive: no x, some rest
        : [ x, ...interleave(...rest, xs) ]  // inductive: some x, some rest
    
    console.log (interleave ([0, 2, 4, 6], [1, 3, 5])) // [ 0 1 2 3 4 5 6 ]    
    console.log (interleave ([0, 2, 4], [1, 3, 5, 7])) // [ 0 1 2 3 4 5 7 ]
    console.log (interleave ([0, 2, 4], []))           // [ 0 2 4 ]
    console.log (interleave ([], [1, 3, 5, 7]))        // [ 1 3 5 7 ]
    console.log (interleave ([], []))                  // [ ]

提交回复
热议问题