2013-02-24 1 views
0

je dois écrire une fonction de filtre qui me permettra d'interroger par objet imbriqué, comme ceci:Filtrage d'un objet avec requête qui contient des références à l'objet imbriqué

var data = [ 
      { twitter: { id: 1, name: "Bob" } }, 
      { twitter: { id: 2, name: "Jones" } } 
      ], 
    query = { 'twitter.id': 1 }; 

# Perform filter using data and query variables 
var search = … 

console.log(search); 
> ["0"] 

Le filtre doit retourner un tableau d'index correspondre à la requête.

J'ai actuellement ce travail sans support d'objet imbriqué au http://jsbin.com/umeros/2/edit.

Cependant, je voudrais pouvoir interroger des objets imbriqués, tels que query vu ci-dessus.

+0

Découvrez [cet article] (http://stackoverflow.com/a/14397052/1048572), vous pouvez choisir un dupliquer gratuitement. – Bergi

+0

vérifiez cette bibliothèque http://jsonselect.org/#overview – jcubic

+0

Cela n'aide pas @Bergi. –

Répondre

1

Utilisation de la fonction ref de this answer, votre filtre devrait ressembler à ceci:

var search = _.filter(_.keys(data), function (key) { 
    var obj = data[key]; 
    return _.every(query, function (val, queryKey) { 
     return ref(obj, queryKey) === val; 
    }); 
}); 
+0

Cela ne fonctionnera que pour une propriété dans 'query': http://jsbin.com/uqabog/1/edit. Pouvez-vous penser à une solution qui fonctionnera avec plusieurs propriétés dans 'query'? –

+0

Je suis un peu confus maintenant (désolé) mais je semble l'avoir fonctionné dans ES5 (qui est ce que j'ai commencé avec): http://jsbin.com/umeros/9/edit. Merci. –

+0

[Il fait pour plusieurs] (http://jsbin.com/uqabog/3/edit). Seul 'every' s'attend à ce que vous retourniez' true', sinon il casse la boucle car il sait déjà que * chaque élément * ne remplit pas la condition. – Bergi

Questions connexes