Подтвердить что ты не робот

Определить, имеет ли объект свойство и значение в 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;
};

Это работает, но не в массиве. Как это сделать?

4b9b3361

Ответ 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() - это трюк.