Aquí hay algunas respuestas verdaderamente creativas a esta pregunta. Aquí hay una solución simple para aquellos que recién comienzan con matrices. Se puede hacer que funcione hasta los navegadores compatibles con ECMAScript 3, si lo desea.
Sepa algo sobre empalmes antes de comenzar.
Red de desarrolladores de Mozilla: Array.prototype.splice ()
Primero, comprenda dos formas importantes de .splice()
.
let a1 = [1,2,3,4],
a2 = [1,2];
Método 1) Elimine los elementos x (deleteCount), comenzando desde un índice deseado.
let startIndex = 0,
deleteCount = 2;
a1.splice(startIndex, deleteCount);
Método 2) Eliminar elementos después de un índice de inicio deseado hasta el final de la matriz.
a1.splice(2);
Al usar .splice()
, un objetivo podría ser dividir a1
en matrices de cabeza y cola mediante uno de los dos formularios anteriores.
Usando el método n. ° 1, el valor de retorno se convertiría en la cabeza y a1
la cola.
let head = a1.splice(startIndex, deleteCount);
Ahora, de un solo golpe, concatenar la cabeza, el cuerpo ( a2
) y la cola
[].concat(head, a2, a1);
Por lo tanto, esta solución se parece más al mundo real que cualquier otra presentada hasta ahora. ¿No es esto lo que harías con Legos? ;-) Aquí hay una función, hecha usando el método # 2.
function insertArray(target, body, startIndex)
{
let tail = target.splice(startIndex);
return [].concat(target, body, tail);
}
let newArray = insertArray([1, 2, 3, 4], ["a", "b"], 2);
Corta:
function insertArray(target, body, startIndex)
{
return [].concat(target, body, target.splice(startIndex));
}
Más seguro:
function insertArray(target, body, startIndex)
{
const ARRAY_START = 0,
ARRAY_END = target.length - 1,
ARRAY_NEG_END = -1,
START_INDEX_MAGNITUDE = Math.abs(startIndex);
if (startIndex === ARRAY_START) {
throw new Error("The value for startIndex cannot be zero (0).");
}
if (startIndex === ARRAY_END || startIndex === ARRAY_NEG_END) {
throw new Error("The startIndex cannot be equal to the last index in target, or -1.");
}
if (START_INDEX_MAGNITUDE >= ARRAY_END) {
throw new Error("The absolute value of startIndex must be less than the last index.");
}
return [].concat(target, body, target.splice(startIndex));
}
Las ventajas de esta solución incluyen:
1) Una premisa simple domina la solución: llene una matriz vacía.
2) La nomenclatura de la cabeza, el cuerpo y la cola se siente natural.
3) No hay doble llamada a .slice()
. Sin rebanar en absoluto.
4) No .apply()
. Altamente innecesario.
5) Se evita el encadenamiento de métodos.
6) Funciona en ECMAScript 3 y 5 simplemente usando en var
lugar de let
o const
.
** 7) Asegura que habrá una cabeza y una cola para golpear el cuerpo, a diferencia de muchas otras soluciones presentadas. Si está agregando una matriz antes o después de los límites, al menos debería usar .concat()
!!!!
Nota: El uso del operador de propagación ...
hace que todo esto sea mucho más fácil de lograr.