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?
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
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
}
}
- 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
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.
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.