1119 votes

Javascript place les valeurs du tableau dans un autre tableau

J'ai un tableau javascript dataArray qui je veux pousser dans une nouvelle matrice newArray. Sauf que je ne veux pas newArray[0] être dataArray. Je veux pousser dans toutes les valeurs dans le nouveau tableau:

var newArray = [];

newArray.pushValues(dataArray1);
newArray.pushValues(dataArray2);
// ...

ou encore mieux:

var newArray = new Array (
   dataArray1.values(),
   dataArray2.values(),
   // ... where values() (or something equivalent) would push the individual values into the array, rather than the array itself
);

Alors maintenant, le nouveau tableau contenant toutes les valeurs de l'individu tableaux de données. Est-il une abréviation comme pushValues disponible donc je n'ai pas à répéter sur chaque individu dataArray, en ajoutant les valeurs 1 par 1?

1498voto

WiseGuyEh Points 2927

Utilisez la fonction concat , comme ceci:

 var arrayA = [1, 2];
var arrayB = [3, 4];
var newArray = arrayA.concat(arrayB);
 

La valeur de newArray sera [1, 2, 3, 4] ( arrayA et arrayB reste inchangée; concat crée et renvoie un nouveau tableau pour le résultat).

679voto

Tim Down Points 124501

À condition que vos tableaux ne sont pas énormes (voir avertissement ci-dessous), vous pouvez utiliser l' push() méthode de la matrice à laquelle vous souhaitez ajouter des valeurs. push() peuvent prendre de multiples paramètres de sorte que vous pouvez utiliser ses apply() méthode pour passer le tableau de valeurs à être poussé comme une liste de paramètres de la fonction. Ceci a l'avantage de l'utilisation de concat() d'ajouter des éléments au tableau en place plutôt que de créer un nouveau tableau.

Cependant, il semble que pour les tableaux de grande taille (de l'ordre de 100 000 membres ou plus), cette astuce peut échouer. Pour ces tableaux, à l'aide d'une boucle est une meilleure approche. Voir http://stackoverflow.com/a/17368101/96100 pour plus de détails.

var newArray = [];
newArray.push.apply(newArray, dataArray1);
newArray.push.apply(newArray, dataArray2);

Vous pourriez vouloir généraliser cela dans une fonction:

function pushArray(arr, arr2) {
    arr.push.apply(arr, arr2);
}

... ou ajoutez - Arrays'prototype:

Array.prototype.pushArray = function(arr) {
    this.push.apply(this, arr);
};

var newArray = [];
newArray.pushArray(dataArray1);
newArray.pushArray(dataArray2);

... ou à imiter l'original push() méthode en permettant à plusieurs paramètres en utilisant le fait que l' concat(), comme push(), permet à plusieurs paramètres:

Array.prototype.pushArray = function() {
    this.push.apply(this, this.concat.apply([], arguments));
};

var newArray = [];
newArray.pushArray(dataArray1, dataArray2);

Voici une boucle basée sur la version de la dernier exemple, adapté pour les grands groupes et tous les principaux navigateurs, y compris IE <= 8:

Array.prototype.pushArray = function() {
    var toPush = this.concat.apply([], arguments);
    for (var i = 0, len = toPush.length; i < len; ++i) {
        this.push(toPush[i]);
    }
};

16voto

 var a=new Array('a','b','c');
var b=new Array('d','e','f');
var d=new Array('x','y','z');
var c=a.concat(b,d)
 

Cela résout-il votre problème?

-3voto

user1911703 Points 86

au lieu de la fonction push (), utilisez la fonction de concat pour IE. Exemple,

 var a=a.concat(a,new Array('amin'));
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X