11 votes

.grep sur un objet JSON

J'essaie d'utiliser grep pour filtrer un objet Javascript comme suit :

var options = { 
    5: {
        group: "2",
        title: "foo"
    },
    9: {
        group: "1",
        title: "bar"
    }
};

var groups = $.grep(options, function(e){ return e.group == 2 });

J'obtiens des résultats vides et je suppose que cela a quelque chose à voir avec les clés non séquentielles de l'objet englobant. Comment résoudre ce problème ?

Mise à jour

J'ai essayé plusieurs méthodes grep différentes, y compris l'utilisation de

for (key in option) 

pour grep sur option[key] mais je n'ai pas réussi à le faire fonctionner. En fin de compte, j'ai choisi une autre voie, comme indiqué ici :

var option_ids = new Array();
for (key in option) {
    if ( option[key]['group'] == 2 ) option_ids.push(option[key]['id']);
}

22voto

jmdeldin Points 2932

Vous ne pouvez pas grep sur un objet et s'attendre à un résultat sain. Cependant, vous pouvez grep sur un tableau, il nous suffit donc d'obtenir une liste de clés avec la fonction Object.keys :

$.grep(Object.keys(options), function (k) { return options[k].group == 2; })
//=> ["5"]

1voto

Sajjad Shirazy Points 1213

Il s'agit d'une fonction de filtrage pour les tableaux et les objets :

function filter(target, func) {
  if (target instanceof Array) {
    return target.filter(func);
  } else {
    var result = {};
    $.each(Object.keys(target).filter(function (value) {
      return func.call(null, target[value]);
    }), function (i, value) {
      result[value] = target[value];
    });
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X