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

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!

  • Comment accéder à une valeur spécifique à partir d'un tableau imbriqué dans un tableau d'objets?
  • Comparer et ajouter des éléments à un éventail d'objets
  • Comment trier un tableau multidimensionnel par plusieurs colonnes en JavaScript?
  • Traverse 2D Array (Matrix) Diagonally
  • Vérification d'un index numérique dans un tableau javascript
  • Comment puis-je créer un tableau bidimensionnel en JavaScript?
  • Nested-repeat imbriqué pour un tableau multidimensionnel
  • Comment trier le tableau bidimensionnel par valeur de colonne?
  • 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.