web-dev-qa-db-ja.com

オブジェクトに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;
};

これは機能しますが、配列では機能しません。それ、どうやったら出来るの?

22
Joey Hipolito

some Array method を使用して、配列の各値について関数をテストします。

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

ところで、 拡張しないObject.prototype

31
Bergi

-プロパティの場合-

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

-値について---

「Object.prototype.hasValue = ...」を使用するとjsにとって致命的ですが、Object.definePropertyenumerable:false(デフォルト)でプロパティを定義できます

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

nodeListにElementがある場合の実験テストのみ

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
bortunac

配列の場合、もちろんforでその配列を参照する必要があります

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

オブジェクトにプロパティがあるが、プロパティの値が設定されていないかどうかをチェックする別のソリューションを次に示します。プロパティ値に0、null、または空の文字列がある可能性があります。

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

Boolean()はここでのトリックです。

0
Ali Hayder

通常、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はネイティブ関数ではありませんが、一般的なフレームワークを確認してください。

0
Halcyon