Como inserir um item em um array em um índice específico (JavaScript)?

Estou à procura de um método de inserção de matriz JavaScript, no estilo de:

arr.insert(index, item)

De preferência em jQuery, mas qualquer implementação JavaScript serve neste momento.

Solução

O que você quer é a função splice no objeto array nativo.

arr.splice(index, 0, item); irá inserir item em arr no índice especificado (deletando primeiro 0 itens, ou seja, é apenas um insert).

Neste exemplo vamos criar um array e adicionar um elemento a ele no índice 2:

var arr = [];
arr[0] = "Jani";
arr[1] = "Hege";
arr[2] = "Stale";
arr[3] = "Kai Jim";
arr[4] = "Borge";

console.log(arr.join());
arr.splice(2, 0, "Lene");
console.log(arr.join());
Comentários (16)

Você pode implementar o método `Array.insert' fazendo isso:

Array.prototype.insert = function ( index, item ) {
    this.splice( index, 0, item );
};

Então podes usá-lo como:

var arr = [ 'A', 'B', 'D', 'E' ];
arr.insert(2, 'C');

// => arr == [ 'A', 'B', 'C', 'D', 'E' ]
Comentários (9)

Se você quiser inserir vários elementos em um array ao mesmo tempo, verifique esta resposta de estouro de pilha: https://stackoverflow.com/questions/1348178/a-better-way-to-splice-an-arrray-into-an-array-in-javascript

Também aqui estão algumas funções para ilustrar os dois exemplos:

function insertAt(array, index) {
    var arrayToInsert = Array.prototype.splice.apply(arguments, [2]);
    return insertArrayAt(array, index, arrayToInsert);
}

function insertArrayAt(array, index, arrayToInsert) {
    Array.prototype.splice.apply(array, [index, 0].concat(arrayToInsert));
    return array;
}

Finalmente aqui está um jsFiddle para que você possa vê-lo por si mesmo: http://jsfiddle.net/luisperezphd/Wc8aS/

E é assim que se usam as funções:

// if you want to insert specific values whether constants or variables:
insertAt(arr, 1, "x", "y", "z");

// OR if you have an array:
var arrToInsert = ["x", "y", "z"];
insertArrayAt(arr, 1, arrToInsert);
Comentários (3)