Actuellement, je reçois une réponse JSON comme celle-ci ...
{items:[
{itemId:1,isRight:0},
{itemId:2,isRight:1},
{itemId:3,isRight:0}
]}
Je veux effectuer quelque chose comme ça (pseudo code)
var arrayFound = obj.items.Find({isRight:1})
Cela reviendrait alors
[{itemId:2,isRight:1}]
Je sais que je peux le faire avec une boucle pour chaque boucle, cependant, j'essaie d'éviter cela. Ceci est actuellement côté serveur sur une application Node.JS.
var arrayFound = obj.items.filter(function(item) {
return item.isRight == 1;
});
Bien sûr, vous pourriez aussi écrire une fonction pour trouver des éléments par un littéral d'objet en tant que condition:
Array.prototype.myFind = function(obj) {
return this.filter(function(item) {
for (var prop in obj)
if (!(prop in item) || obj[prop] !== item[prop])
return false;
return true;
});
};
// then use:
var arrayFound = obj.items.myFind({isRight:1});
Les deux fonctions utilisent la méthode native .filter()
on Arrays.
Etant donné que Node implémente la spécification EcmaScript 5, vous pouvez utiliser Array # filter on obj.items
.
édité pour utiliser la méthode native
var arrayFound = obj.items.filter(function() {
return this.isRight == 1;
});
Jetez un coup d'œil à http://underscorejs.org Ceci est une superbe bibliothèque.
Vous pouvez essayer de trouver le résultat attendu en utilisant la fonction find , vous pouvez voir le résultat dans le script suivant:
var jsonItems = {items:[
{itemId:1,isRight:0},
{itemId:2,isRight:1},
{itemId:3,isRight:0}
]}
var rta = jsonItems.items.find(
(it) => {
return it.isRight === 1;
}
);
console.log("RTA: " + JSON.stringify(rta));
// RTA: {"itemId":2,"isRight":1}
En fait, j'ai trouvé un moyen encore plus simple si vous utilisez mongoDB pour conserver vos documents ...
findDocumentsByJSON = function(json, db,docType,callback) {
this.getCollection(db,docType,function(error, collection) {
if( error ) callback(error)
else {
collection.find(json).toArray(function(error, results) {
if( error ) callback(error)
else
callback(null, results)
});
}
});
}
Vous pouvez ensuite passer {isRight: 1} à la méthode et renvoyer un tableau UNIQUEMENT des objets, me permettant ainsi de pousser le poids lourd au mongo compétent.