2010-12-13 34 views
1

Je veux trier un objet/tableau JSON (représenté ci-dessous par myArray), sur des valeurs d'un autre tableau - très proche de la requête MYSQL MYSQL WHERE IN(1,2,3). J'ai été en mesure d'obtenir un great answer by Nick Craver sur la façon de trier par une propriété et la valeur, mais comment puis-je le faire avec plusieurs valeurs de mon autre tableau?jQuery/JS: Tableau de tri basé sur un autre tableau?

Voici mon ensemble de données tableau JSON:

var myArray = [ 
{ 
    "id":"2", 
    "name":"My name", 
    "properties":{"prop1":"value1"} 
}]; 

Et le tableau que je veux trier sur (sérialisé, provenant d'une forme droite):

var sortArray = [ { "prop1":"value1","prop2":"value2" }]; 

Le courant fonction de tri comme il semble en ce moment (avec la permission de Nick Craver):

function filterDataset(property, value){ 
    var newArray = []; 

    for (var i = 0, l = myArray.length; i < l; i++) { 
     if (myArray[i].properties[property] === value) 
     newArray.push(myArray[i]); 
    }    
    return newArray; 
} 
+0

erreur petite dans la fonction - maintenant corrigée. – Industrial

+0

Peut-être que vous devriez clarifier votre objectif. Il semble que vous vouliez trier les éléments d'un tableau, mais votre tableau donné n'a qu'un seul élément. –

+0

Salut! Le tableau n'a qu'un seul élément pour devenir un peu plus lisible. Je veux trier le tableau 'myArray' comme si je faisais une comparaison' || ', comme l'utilisateur 500894 suggère ci-dessous, mais avec un nombre inconnu de propriétés .. – Industrial

Répondre

1

Voilà comment je réussi à le fixer:

function filterDataset2(properties){ 
    var newArray = []; 

    for (var i = 0, l = dataset.length; i < l; i++) { 

     $.each(properties, function(){ 
      if (dataset[i].properties[this.name] === this.value) 
       newArray.push(myArray[i]);    
     }); 

    } 

    return newArray; 
} 
0

Cela peut ne pas être ce que vous voulez dire, mais si vous avez une liste connue de propriétés, pourriez-vous juste || votre comparaison? Disons que vous avez 2 propriétés ...

function filterDataset(property, value){ 
    var newArray = []; 

    for (var i = 0, l = myArray.length; i < l; i++) { 
     if ((dataset[i].egenskaper[property1] === value) || (dataset[i].egenskaper[property2] === value)) 
     newArray.push(myArray[i]); 
    }    
    return newArray; 
} 

Sinon, si la longueur du tableau de tri est inconnue, vous pouvez utiliser une méthode de type array.find qui retourne true si la propriété se trouve dans le tableau en question. Si elle renvoie true, il suffit de pousser cette valeur sur votre tableau nouvellement trié.

+0

Hi! C'est ainsi que je veux qu'il soit filtré avec des comparaisons 'OR' /' || ', mais basé sur les clés et les valeurs dans mon tableau montré (actuellement sérialisé) ... – Industrial

+0

Merci pour votre aide - m'a indiqué dans la bonne direction! – Industrial