2013-10-10 60 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 
} 
}); 

布尔()是这里的窍门。

相关问题