J'ai besoin d'ajouter ou d'ajouter des éléments au début d'un tableau.
Par exemple, si mon tableau ressemble à celui ci-dessous:
[23, 45, 12, 67]
Et la réponse de mon appel AJAX est 34
, je veux que le tableau mis à jour soit comme suit:
[34, 23, 45, 12, 67]
Actuellement, je prévois de le faire comme ceci:
var newArray = [];
newArray.Push(response);
for (var i = 0; i < theArray.length; i++) {
newArray.Push(theArray[i]);
}
theArray = newArray;
delete newArray;
Y a-t-il une meilleure façon de faire cela? Est-ce que Javascript a une fonctionnalité intégrée qui fait ça?
La complexité de ma méthode est O(n)
et il serait vraiment intéressant de voir de meilleures implémentations.
Utilisez unshift
. C'est comme Push
, sauf qu'il ajoute des éléments au début du tableau au lieu de la fin.
unshift
/Push
- ajoute un élément au début/à la fin d'un tableaushift
/pop
- supprime et retourne le premier/dernier élément d'un tableauUn schéma simple ...
unshift -> array <- Push
shift <- array -> pop
et graphique:
add remove start end
Push X X
pop X X
unshift X X
shift X X
Consultez la documentation MDN Array . Pratiquement toutes les langues ayant la capacité de pousser/sauter des éléments d'un tableau auront également la possibilité de décaler/décaler des éléments (parfois appelés Push_front
/pop_front
), vous ne devriez jamais avoir à les implémenter vous-même.
var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]
...
:DEMO
var arr = [23, 45, 12, 67];
arr = [34, ...arr]; // RESULT : [34,23, 45, 12, 67]
console.log(arr)
Une autre façon de faire cela à travers concat
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log([0].concat(arr));
La différence entre concat
et unshift
est que concat
renvoie un nouveau tableau. La performance entre eux pourrait être trouvée ici .
function fn_unshift() {
arr.unshift(0);
return arr;
}
function fn_concat_init() {
return [0].concat(arr)
}
Voici le résultat du test
Quick Cheatsheet:
Les termes shift/unshift et push/pop peuvent être un peu déroutants, du moins pour ceux qui ne connaissent peut-être pas la programmation en langage C.
Si vous ne connaissez pas le jargon, voici une traduction rapide de termes alternatifs, qu'il est peut-être plus facile de retenir:
* array_unshift() - (aka Prepend ;; InsertBefore ;; InsertAtBegin )
* array_shift() - (aka UnPrepend ;; RemoveBefore ;; RemoveFromBegin )
* array_Push() - (aka Append ;; InsertAfter ;; InsertAtEnd )
* array_pop() - (aka UnAppend ;; RemoveAfter ;; RemoveFromEnd )
vous avez un tableau: var arr = [23, 45, 12, 67];
Pour ajouter un élément au début, vous voulez utiliser splice
:
var arr = [23, 45, 12, 67];
arr.splice(0, 0, 34)
console.log(arr);
Push()
ajoute un nouvel élément à la fin d'un tableau.pop()
supprime un élément de la fin d'un tableau.
unshift()
ajoute un nouvel élément au début d'un tableau.shift()
supprime un élément du début d'un tableau.
utiliser theArray.unshift(response)
var testdata = new Array();
testdata = [23, 45, 12, 67];
testdata = [34, ...testdata];
console.log(testdata)
var array = [23, 45, 12, 67];
array.unshift(11);
alert(array);
En fait, tous les unshift
/Push
et shift
/pop
mutate le tableau Origin.
La unshift
/Push
ajoute un élément au tableau existant depuis le début/la fin et shift
/pop
supprime un élément du début/la fin d'un tableau.
Mais il existe un moyen d'ajouter des éléments à un tableau sans mutation. le résultat est un nouveau tableau, à ajouter à la fin du tableau, utilisez le code ci-dessous:
const originArray = ['one', 'two', 'three'];
const newItem = 4;
const newArray = originArray.concat(newItem);
Pour ajouter au début du tableau d'origine, utilisez le code ci-dessous:
const originArray = ['one', 'two', 'three'];
const newItem = 0;
const newArray = (originArray.reverse().concat(newItem)).reverse();
Avec la méthode ci-dessus, vous ajoutez au début/à la fin d'un tableau sans mutation.
Si vous devez continuellement insérer un élément au début d'un tableau, il est plus rapide d'utiliser des instructions Push
suivies d'un appel à reverse
, au lieu d'appeler unshift
tout le temps.
Test de référence:http://jsben.ch/kLIYf
En utilisant splice
, nous insérons un élément dans un tableau au début:
arrName.splice( 0, 0, 'newName1' );