2010-04-30 2 views
0

étant donné le graphique d'objet suivant:JavaScript juxtaposé pour collecter des valeurs à partir du graphe d'objets?

{ 
"children": [ 
    { 
     "child": { 
      "pets": [ 
       { 
        "pet": { 
         "name": "fido" 
        } 
       }, 
       { 
        "pet": { 
         "name": "fluffy" 
        } 
       } 
      ] 
     } 
    }, 
    { 
     "child": { 
      "pets": [ 
       { 
        "pet": { 
         "name": "spike" 
        } 
       } 
      ] 
     } 
    } 
] 

}

Quelle serait une belle ligne unique (ou deux) pour recueillir les noms des animaux de compagnie de mes petits-enfants? Le résultat devrait être ["fido", "fluffy", "spike"]

Je ne veux pas écrire des méthodes personnalisées pour cela ... Je cherche quelque chose comme la façon dont jQuery travaille dans la sélection des nœuds dom , où vous pouvez simplement lui donner un chemin de type CSS et il les récupère pour vous.

je me attends le chemin d'expression pour ressembler à quelque chose comme « enfants animaux enfant nom animal »

Répondre

0

je me suis installé sur le JSONPath library, qui est comme XPath pour JSON. LINQ semblait un peu lourd pour mes besoins, résultant en une syntaxe plus verbeuse, même si elle semble plus puissante. Peut-être que si mes besoins changent, je vais améliorer.

2

LINQ JavaScript (JSLINQ) est une implémentation de LINQ aux objets mis en œuvre en JavaScript. Il est construit en utilisant un ensemble de méthodes d'extension construites au-dessus de l'objet JavaScript Array. Si vous utilisez un tableau, vous pouvez utiliser LINQ to JavaScript.

LINQ to JavaScript est un projet open source et vous pouvez le télécharger ici: http://jslinq.codeplex.com/

Hope this helps ...

s

+0

Merci, je vais vérifier! –

+0

Wow, c'est une super bibliothèque. –

+0

Pourquoi diable est-ce marqué comme spam? –

1

Si vous ne souhaitez pas utiliser une bibliothèque , c'est la manière la plus concise que je puisse penser de l'écrire.

var Ar=[]; 
p.children.map(function(a){a.child.pets.map(function(a){Ar.push(a.pet.name)})}); 
+0

Appréciez la réponse! Malheureusement je cherchais quelque chose de plus intuitif (pour des raisons de maintenance, tu comprends ...) –

Questions connexes