web-dev-qa-db-fra.com

Déterminer si l'objet a une propriété et une valeur en javascript

Je voulais vérifier si un objet a une propriété de quelque chose et que sa valeur est égale à une certaine valeur.

var test = [{name : "joey", age: 15}, {name: "hell", age: 12}]

Voilà, un tableau d'objets, je voulais maintenant chercher à l'intérieur de l'objet et retourner vrai si l'objet contient ce que je voulais.

J'ai essayé de le faire comme ça:

Object.prototype.inObject = function(key, value) {
if (this.hasOwnProperty(key) && this[key] === value) {
  return true
};
return false;
};

Cela fonctionne, mais pas dans un tableau. Comment je fais ça?

19
Joey Hipolito

Utilisez la méthode some Array pour tester votre fonction pour chaque valeur du tableau:

function hasValue(obj, key, value) {
    return obj.hasOwnProperty(key) && obj[key] === value;
}
var test = [{name : "joey", age: 15}, {name: "hell", age: 12}]
console.log(test.some(function(boy) { return hasValue(boy, "age", 12); }));
// => true - there is a twelve-year-old boy in the array

Btw, ne pas étendre Object.prototype .

30
Bergi

Pour un tableau, vous devez bien sûr parcourir ce tableau avec for

for(var i = 0 ; i < yourArray.length; i++){
    if(yourArray[i].hasOwnProperty("name") && yourArray[i].name === "yourValue") {
     //process if true
    }
} 
3
Snake Eyes

- pour la propriété -

if(prop in Obj)  
//or
Obj.hasOwnProperty(prop)

- pour la valeur ---

Utiliser "Object.prototype.hasValue = ..." sera FATAL pour js mais Object.defineProperty vous permettra de définir les propriétés avec enumerable: false (défaut) 

Object.defineProperty(Object.prototype,"hasValue",{
   value : function (obj){
              var $=this;
              for( prop in $ ){
                  if( $[prop] === obj ) return prop;
              }
              return false;
           }
});

juste pour tester si une liste de noeuds a un élément

var NL=document.QuerySelectorAll("[atr_name]"),
    EL= document.getElementById("an_id");
console.log( NL.hasValue(EL) )  

// if false then #an_id has not atr_name
3
bortunac

Voici une autre solution pour vérifier si l'objet a la propriété mais que la valeur de la propriété n'est pas définie. Peut-être que la valeur de la propriété a 0, null ou une chaîne vide.

array.forEach(function(e){
 if(e.hasOwnProperty(property) && Boolean(e[property])){
  //do something
 }
 else{
  //do something else
 }
});

Booléen () est le truc ici.

0
Ali Hayder

En général, vous utiliserez quelque chose comme Object.first:

// search for key "foo" with value "bar"
var found = !!Object.first(test, function (obj) {
    return obj.hasOwnProperty("foo") && obj.foo === "bar";
});

En supposant que Object.first renvoie une valeur falsy quand il ne trouve pas de correspondance.

Object.first n'est pas une fonction native, mais vérifiez dans les frameworks populaires, ils en sont forcément dotés.

0
Halcyon