Определить, имеет ли объект свойство и значение в javascript
Я хотел проверить, имеет ли объект что-то, и его значение равно определенному значению.
var test = [{name : "joey", age: 15}, {name: "hell", age: 12}]
Вот вы, массив объектов, теперь я хотел выполнить поиск внутри объекта и вернуть true, если объект содержит то, что я хотел.
Я попытался сделать это вот так:
Object.prototype.inObject = function(key, value) {
if (this.hasOwnProperty(key) && this[key] === value) {
return true
};
return false;
};
Это работает, но не в массиве. Как это сделать?
Ответы
Ответ 1
Используйте some
Метод массива для проверки вашей функции для каждого значения массива:
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, не расширяют Object.prototype
.
Ответ 2
Для массива, конечно, вам нужно просмотреть этот массив с помощью for
for(var i = 0 ; i < yourArray.length; i++){
if(yourArray[i].hasOwnProperty("name") && yourArray[i].name === "yourValue") {
//process if true
}
}
Ответ 3
- для свойства -
if(prop in Obj)
//or
Obj.hasOwnProperty(prop)
- для значения ---
Использование "Object.prototype.hasValue =..." будет FATAL для js, но Object.defineProperty позволяет определять свойства с помощью перечисляемого: false (по умолчанию)
Object.defineProperty(Object.prototype,"hasValue",{
value : function (obj){
var $=this;
for( prop in $ ){
if( $[prop] === obj ) return prop;
}
return false;
}
});
только для эксперимента, если у NodeList есть элемент
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
Ответ 4
Обычно вы будете использовать что-то вроде Object.first
:
// search for key "foo" with value "bar"
var found = !!Object.first(test, function (obj) {
return obj.hasOwnProperty("foo") && obj.foo === "bar";
});
Предполагая, что Object.first
вернет некоторое значение фальшивки, если оно не найдет соответствия.
Object.first
не является нативной функцией, но проверяет популярные фреймворки, они должны иметь один.
Ответ 5
Вот еще одно решение для проверки, имеет ли объект свойство, но значение свойства не задано. Возможно, значение свойства имеет 0, нуль или пустую строку.
array.forEach(function(e){
if(e.hasOwnProperty(property) && Boolean(e[property])){
//do something
}
else{
//do something else
}
});
Boolean() - это трюк.