Q:

Intercalar dois arrays em JavaScript

Imagine que eu tenha dois arrays:
var array1 = ['abc', 'def', 'ghi'];
var array2 = ['123', '456', '789'];

Eu posso utilizar a função .concat() para juntar ambos os arrays um depois do outro, exemplo:
array1.concat(array2) // ['abc', 'def', 'ghi', '123', '456', '789']

Mas como conseguiria intercalar os valores dos arrays? Existe alguma função em JavaScript para junta-los de forma que os valores de ambos se misturem? Exemplo:
array1.intercalate(array2) //['abc', '123', 'def', '456', 'ghi', '789']

A:

Não existe função nativa para isso, mas você pode construir uma:

var array1 = ['abc', 'def', 'ghi'];
var array2 = ['123', '456', '789'];

if(!Array.prototype.hasOwnProperty('interpolate')) {
  Array.prototype.interpolate = function(other) {
    var limit = this.length < other.length ? other.length : this.length;
    var out = [];
  
    for(var i = 0; i < limit; i++) {
      if(this.length > 0) out.push(this.shift());
      if(other.length > 0) out.push(other.shift());
    }
    
    return out;
  }
}

document.body.innerHTML = JSON.stringify(array1.interpolate(array2));

E valem os alertas do @Pablo abaixo: se não tiver controle sobre o uso do código e/ou não souber bem o que está fazendo, crie a função fora do prototype (e passe outro array para usar no lugar de this).

A:

Da para você criar uma função simples para resolver isso, fiz um exemplo aqui, ainda não testei vários casos mas para o seu problema apresentado resolve.
Exemplo:

var array1 = ['abc', 'def', 'ghi'];
var array2 = ['123', '456', '789'];


function intercale(array1, array2) {
  var arrayResult = [];
  var total = 0;
  if (array1.length > array2.length) {
    total = array1.length;
  } else {
    total = array2.length;
  }

  for (var i = 0; i < total; i++) {
    if (array1[i]) {
      arrayResult.push(array1[i]);
    }
    if (array2[i]) {
      arrayResult.push(array2[i]);
    }
  }

  return arrayResult;
}


document.body.innerHTML = JSON.stringify(intercale(array1, array2));

