[
{"id":1,"id_parent":7,"name":"sub category of cat 7-1"}, 
{"id":2,"id_parent":7,"name":"sub category of cat 7-2"},
{"id":3,"id_parent":8,"name":"sub category of cat 8-1"},
{"id":4,"id_parent":8,"name":"sub category of cat 8-2"}
]

Je veux trouver un groupe d'objets dans un plus grand groupe. Par exemple, récupérez simplement les objets qui ont id_parent = 7. Maintenant, j'utilise une boucle for pour le faire, mais je me demande s'il existe une autre solution pour le faire. Je vous remercie

0
hungneox 30 oct. 2011 à 09:20

4 réponses

Meilleure réponse

Si votre navigateur a Array.filter, vous pouvez le faire ce:

var children_of_7 = data.filter(function(item) {
    return item.id_parent === 7;
});

Si votre navigateur ne l'a pas nativement, vous pouvez le caler.

1
icktoofay 30 oct. 2011 à 05:25

Si vous avez un navigateur qui fournit l'implémentation d'ECMAScript 5th Edition, vous pouvez en effet le faire:

var filteredResults = data.filter(function(item) {
  return item.id_parent === 7;
});

Sinon votre bonne boucle olé est la solution:

var filteredResults = [];
for (var i = 0, l = data.length; i < l; i++) {
  if (data[i].id_parent === 7) {
    filteredResults.push(data[i]);
  }
}

Gardez à l'esprit, cependant, qu'au moins AFAIK, filter a une pénalité de performance.

J'ai rassemblé un test rapide pour référence - peut être vu ici.

Et la différence est substantielle.

1
ZenMaster 30 oct. 2011 à 06:05

Underscore.js offre des capacités de recherche intéressantes:

http://documentcloud.github.com/underscore/

0
Justin Beckwith 30 oct. 2011 à 05:27

Non, il n'y en a pas. Tout ce que vous pouvez faire est de parcourir votre JSON.

0
Misguided 30 oct. 2011 à 05:25