Je voudrais filtrer le tableau ci-dessous et supprimer tous les objets où type est égal à une variable définie du même nom et est faux.

Dans l'exemple ci-dessous, l'élément contenant type: second doit être supprimé du tableau.

var first = true,
  second = false,
  third = true,
  obj = {"data": [
    {"type":"first","message":"This is the first message"},
    {"type":"second","message":"This is the second message."},
    {"type":"third","message":"This is the third message."}
]};

data = obj.data;

var filtered = $.grep(data, function(v) {
    return ....
});

console.log(filtered);

http://jsfiddle.net/ejPV4/642/

0
Asa Carter 10 mars 2016 à 01:03

5 réponses

Meilleure réponse

Au lieu de variables, utilisez un objet avec les types comme clés.

var flags = {
    first: true,
    second: false,
    third: true
};
var filtered = $.grep(data, function(v) {
    return flags[v.type];
});
2
Barmar 9 mars 2016 à 22:16

MISE À JOUR Essayez avec ceci: http://jsfiddle.net/ejPV4/646/

    function Stuff(){

        obj = {"data": [
              {"type":"first","message":"This is the first message"},
              {"type":"second","message":"This is the second message."},
              {"type":"third","message":"This is the third message."}
                    ]};
    Stuff.prototype.filter = function(item){
            data = obj.data;
        var remove = "";
        this.item = item;

            $.each(data,function(i,value){
              if(value.type == item){
                remove = i;
              }                 
                    });
          data.splice(remove, 1);
          return data;
     };
}

var think = new Stuff();
console.log(think.filter('first'));
-2
Jorge Mejia 9 mars 2016 à 23:01

Vous n'avez pas besoin de jQuery pour cela. Un simple filtre fonctionnera. Je ne sais pas vraiment si vous pouvez comparer une chaîne étant un nom de variable en dehors de eval, et je ne suis même pas sûr de suggérer cette méthode. Je suggère simplement d'avoir le type booléen et de faire:

const validation = {
  first: true;
  second: false;
  third: true;
};
let filtered = data.filter(v => validation[v.type]);

Vous ne pouvez pas (vous pouvez techniquement, mais ne devriez vraiment pas) avoir des variables variables en JavaScript. Utilisez plutôt un objet.

1
Madara's Ghost 9 mars 2016 à 22:15
var types = ['second'];
var filtered = $.grep(obj.data, function(element, index) {
  return types.indexOf(element.type) === -1;
});

Vous pouvez définir les types que vous souhaitez filtrer en les incluant dans le tableau des types.

Exemple en direct

1
Pabs123 9 mars 2016 à 22:21

jsfiddle

var obj = {"data": [
        {"type":"first","message":"This is the first message"},
        {"type":"second","message":"This is the second message."},
        {"type":"third","message":"This is the third message."}
    ]};

    var result = obj.data.filter(function(elem, index){
        return elem.type != "second";
    })

    console.log(result);
-2
Manish Tuteja 9 mars 2016 à 22:12