Grouper les éléments du tableau en fonction de javascript variable

J'ai un tableau qui est créé dynamique à partir d'un document xml qui ressemble à quelque chose comme ceci:

myArray[0] = [1,The Melting Pot,A] myArray[1] = [5,Mama's MexicanKitchen,C] myArray[2] = [6,Wingdome,D] myArray[3] = [7,Piroshky Piroshky,D] myArray[4] = [4,Crab Pot,F] myArray[5] = [2,Ipanema Grill,G] myArray[6] = [0,Pan Africa Market,Z] 

Ce tableau est créé dans une boucle for et peut contenir tout ce qui est basé sur le document xml

  • JS callback en utilisant map () avec une fonction qui possède un paramètre supplémentaire
  • Javascript array multidimensionnel?
  • Accès aux propriétés d'un ensemble d'objets
  • Javascript 2d array indexOf
  • Tri des tableaux en javascript par valeur de clé d'objet
  • La différence entre assert.equal et assert.deepEqual dans le test Javascript avec Mocha?
  • Ce que je dois accomplir est de regrouper les éléments de ce tableau en fonction des lettres afin que tous les objets de tableau qui ont la lettre A dans eux soient stockés dans un autre tableau comme ceci

     other['A'] = ['item 1', 'item 2', 'item 3']; other['B'] = ['item 4', 'item 5']; other['C'] = ['item 6']; 

    Pour préciser, je dois trier les éléments en fonction des variables à partir du tableau, dans ce cas les lettres afin que tous les objets de tableau contenant la lettre A passent sous le nouveau tableau par lettre

    Merci pour toute aide!

  • Obtenez des résultats uniques de JSON array en utilisant jQuery
  • JavaScript: Accédez à votre propre objet Propriété à l'intérieur de Array Literal
  • Remplacement de valeurs dans l'objet JSON
  • Pour chaque génération de indéfini créé par le constructeur Array
  • Supprimer le dernier élément du tableau
  • Comment puis-je créer un tableau avec des éléments uniques (c'est-à-dire supprimer des doublons)?
  • 6 Solutions collect form web for “Grouper les éléments du tableau en fonction de javascript variable”

    Vous ne devez pas utiliser de tableaux avec des index non-entiers. Votre other variable devrait être un objet simple plutôt qu'un tableau. (Cela fonctionne avec des tableaux, mais ce n'est pas la meilleure option.)

     // assume myArray is already declared and populated as per the question var other = {}, letter, i; for (i=0; i < myArray.length; i++) { letter = myArray[i][2]; // if other doesn't already have a property for the current letter // create it and assign it to a new empty array if (!(letter in other)) other[letter] = []; other[letter].push(myArray[i]); } 

    Étant donné un élément dans myArray [1, "The Melting Pot", "A"], votre exemple ne précise pas si vous souhaitez stocker tout ce qui se trouve dans un other champ ou simplement le champ de chaîne dans la deuxième position du tableau – votre exemple La sortie n'a que des chaînes, mais elles ne correspondent pas à vos chaînes dans myArray . Mon code a été stocké à l'origine uniquement la partie de la chaîne en disant d' other[letter].push(myArray[i][1]); , Mais une personne anonyme a édité mon article pour le modifier à d' other[letter].push(myArray[i]); Qui stocke tout [1, "The Melting Pot", "A"]. À vous de trouver ce que vous voulez faire là-bas, je vous ai donné le code de base dont vous avez besoin.

    Essayez la fonction groupBy offerte par http://underscorejs.org/#groupBy

     _.groupBy([1.3, 2.1, 2.4], function(num){ return Math.floor(num); }); Result => {1: [1.3], 2: [2.1, 2.4]} 

    Vous devez créer un objet JavaScript vide et lui attribuer un tableau pour chaque lettre.

     var object = {}; for ( var x = 0; x < myArray.length; x++ ) { var letter = myArray[x][2]; // create array for this letter if it doesn't exist if ( ! object[letter] ) { object[letter] = []; } object[ myArray[x][2] ].push[ myArray[x] ]; } 

    Démonstration ici .

    Ce code fonctionnera pour votre example .

     var other = Object.create(null), // you can safely use in opeator. letter, item, max, i; for (i = 0, max = myArray.length; i < max; i += 1) { item = myArray[i]; letter = myArray[2]; // If the letter does not exist in the other dict, // create its items list other[letter] = other[letter] || []; other.push(item); } 

    Le bon ol 'ES5 Array Extras est génial.

     var other = {}; myArray.forEach(function(n, i, ary){ other[n[2]] = n.slice(0,2); }); 

    Essayer –

     var myArray = new Array(); myArray[0] = [1,"The Melting Pot,A,3,Sake House","B"]; myArray[1] = [5,"Mama's MexicanKitchen","C"]; myArray[2] = [6,"Wingdome","D"]; myArray[3] = [7,"Piroshky Piroshky","D"]; myArray[4] = [4,"Crab Pot","F"]; myArray[5] = [2,"Ipanema Grill","G"]; myArray[6] = [0,"Pan Africa Market","Z"]; var map = new Object(); for(i =0 ; i < myArray.length; i++){ var key = myArray[i][2]; if(!map[key]){ var array = new Array(); map[key] = array; } map[key].push(myArray[i]); } 
    JavaScript rend le site Web intelligent, beauté et facile à utiliser.