我有一个javascript对象
var obj = {
"0" : "apple",
"1" : "pear",
"2" : "orange"
}
我想检查'orange'是否在obj。
是否有内置功能可以做到这一点?或者我应该迭代obj的每个值吗?
感谢。
答案 0 :(得分:14)
你必须迭代:
for (var k in obj) {
if (!obj.hasOwnProperty(k)) continue;
if (obj[k] === "orange") {
/* yaay! an orange! */
}
}
现在“hasOwnProperty”测试确保你不会绊倒从原型继承的属性。在某些情况下,可能可能,并且确实这是你需要理解的事情之一,以便确定你是否做或不想进行测试。从对象的原型中提取的属性有时可能是各种库放在那里的东西。 (我认为ES5标准提供了控制这些属性是否“可迭代”的方法,但在现实世界中仍然存在IE7。)
答案 1 :(得分:1)
没有内置功能可以执行此操作,您必须检查每个属性。
同样通过对象的外观,它应该是一个数组而不是一个对象。如果是这种情况,那么迭代这些值会稍微容易一些,并且稍微有点效率。
var arr = ['apple','pear','orange'];
function inArray(inVal){
for( var i=0, len=arr.length; i < len; i++){
if (arr[i] == inVal) return true;
}
return false;
}
答案 2 :(得分:1)
function has(obj, value) {
for(var id in obj) {
if(obj[id] == value) {
return true;
}
}
return false;
}
if(has(obj, "orange")) { /* ... */ }
答案 3 :(得分:0)
你可能想看看jQuery.inArray。认为它适用于物体。