2013-10-10 90 views
18

我想檢查一個對象是否具有某個屬性,並且其值等於某個值。確定對象是否具有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; 
}; 

這工作,但不是在一個陣列。我怎麼做?

+0

這個[i] [鍵]當然會是i = 0和1在你的情況下的數組語法 – mplungjan

+1

你在array.length上試過一個循環嗎?然後你可以使用這個[i] [key]等。 – SamHuckaby

回答

27

使用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 

順便說一句,don't extend Object.prototype

+2

在IE9下不支持 – Ecropolis

+3

@ecropolis:但是很平滑,請參閱鏈接文檔的「polyfill」部分 – Bergi

+0

那裏有一個男孩在做什麼? – poepje

0

通常你會使用類似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會返回一些falsy值,當它沒有找到一個匹配。

Object.first是不是本地函數,但檢查流行的框架,他們必然有一個。

+0

從未聽說過Object.first。你的意思是'Array.first'? – Bergi

+0

我想我的意思是'Object.find' – Halcyon

3

對於數組,當然你要瀏覽該陣列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 = ...」 將是致命的JS,但對象.defineProperty讓你定義一個枚舉的屬性:假(默認值)只是爲了實驗測試,如果

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 
+0

這是我找到的用於檢查對象的最有用的答案,也是唯一明確提及許多人會遇到的致命javascript錯誤的答案。 –

0
這裏

是用於檢查所述對象具有屬性,但屬性的值沒有被設置另一種解決方案。也許屬性值有0,null或一個空字符串。

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

布爾()是這裏的竅門。

相關問題