javascript检查值是否与对象匹配
我有一个javascript对象javascript检查值是否与对象匹配,javascript,object,Javascript,Object,我有一个javascript对象 var obj = { "0" : "apple", "1" : "pear", "2" : "orange" } 我想检查obj中是否有“橙色” 是否有一个内置函数可以实现这一点?或者我应该迭代obj的每个值吗 谢谢。您必须迭代: for (var k in obj) { if (!obj.hasOwnProperty(k)) continue; if (obj[k] === "orange") { /* yaay!
var obj = {
"0" : "apple",
"1" : "pear",
"2" : "orange"
}
我想检查obj中是否有“橙色”
是否有一个内置函数可以实现这一点?或者我应该迭代obj的每个值吗
谢谢。您必须迭代:
for (var k in obj) {
if (!obj.hasOwnProperty(k)) continue;
if (obj[k] === "orange") {
/* yaay! an orange! */
}
}
现在,这里的“hasOwnProperty”测试是为了确保您不会在从原型继承的属性上绊倒。在某些情况下,这可能是不可取的,事实上,这是你需要了解的事情之一,这样才能确定你是否想做那个测试。从对象原型中拾取的属性有时可能是由各种库丢弃的内容。(我认为ES5标准提供了控制这些属性是否“可编辑”的方法,但在现实世界中仍然有IE7。)没有内置函数来实现这一点,您必须检查每个属性 此外,根据对象的外观,它应该是一个数组而不是一个对象。如果是这样的话,遍历这些值会稍微容易一些,效率也会稍微高一些
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;
}
var-arr=['apple'、'pear'、'orange'];
INARAY功能(无效){
对于(变量i=0,len=arr.length;i
您可能想看看。我认为它也适用于对象。感谢您的建议,不幸的是我尝试了它,但它没有。+1,但需要注意的是,这不会进行原型检查。如果您可能正在检查具有原型的对象,请将obj[id]==value
更改为obj.hasOwnProperty(id)&&obj[id]==value
。也可以考虑使用<代码>== /<代码>严格的等式,而不是“代码> >=/CODE >松散的相等。如果性能是一个问题,请保持一个并行对象流,它看起来像“代码”{“Apple”):true,“Paple”:true,“橙色”:true } <代码>。然后你可以在parallelObj中快速执行“apple”来进行存在性检查。尽管如此,所有的酷孩子都在使用Object.prototype.hasOwnProperty.call(obj,k)
。是的,很好的一点@sdleihsirhc-如果担心对象可能被“污染”,这绝对是个好主意:-)
function has(obj, value) {
for(var id in obj) {
if(obj[id] == value) {
return true;
}
}
return false;
}
if(has(obj, "orange")) { /* ... */ }