Comment insérer un élément dans un tableau à un index spécifique (JavaScript) ?

Je recherche une méthode JavaScript d'insertion de tableau, dans le style de :

arr.insert(index, item)

De préférence dans jQuery, mais n'importe quelle implémentation JavaScript fera l'affaire à ce stade.

Solution

Ce que vous voulez, c'est la fonction [splice][1] sur l'objet tableau natif.

arr.splice(index, 0, item); insérera item dans arr à l'index spécifié (en supprimant d'abord 0 items, c'est-à-dire que c'est juste une insertion).

Dans cet exemple, nous allons créer un tableau et y ajouter un élément à l'indice 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());

[1] : https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

Commentaires (16)

Vous pouvez implémenter la méthode Array.insert en faisant ceci :

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

Vous pouvez ensuite l'utiliser comme suit :

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

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

Si vous souhaitez insérer plusieurs éléments à la fois dans un tableau, consultez la réponse de Stack Overflow : https://stackoverflow.com/questions/1348178/a-better-way-to-splice-an-arrray-into-an-array-in-javascript.

Voici également quelques fonctions pour illustrer les deux exemples :

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

Enfin, voici un jsFiddle pour que vous puissiez le voir par vous-même : http://jsfiddle.net/luisperezphd/Wc8aS/

Et voici comment utiliser les fonctions :

// 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);
Commentaires (3)