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

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

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

Là vous allez, un ensemble d'objets, maintenant je voulais rechercher dans l'objet et renvoyer true si l'objet contient ce que je voulais.

J'ai essayé de le faire comme ceci:

 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?

Utilisez la méthode 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 .

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

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

– pour la propriété –

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

– pour la valeur —

L'utilisation de "Object.prototype.hasValue = …" sera FATAL pour js mais Object.defineProperty vous permet de définir des propriétés avec enumerable: false (par défaut)

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

Juste pour un test expérimental si un NodeList 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 

Généralement, 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 renverra une valeur faussement lorsqu'il ne trouve pas de correspondance.

Object.first n'est pas une fonction native, mais vérifie les cadres populaires, ils sont tenus d'avoir un.

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

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

Boolean () est l'astuce ici.