2011-09-29 119 views
2

必须是重复的,但我一直在谷歌上搜索“从对象中的JavaScript值获取”和“值的JavaScript对象查找”和每一个变种,并得到行不通的,所以道歉,并在这里不用。从对象中检索值?

说我有一个JavaScript对象是这样的:

var options = {"ford": "red", "citroen": "blue"}; 

我怎么仰望价值blue得到citroen回来?

总是有“写自己的函数”的路线,我想:

function returnbyValue(options, v): 
    for (var prop in options) { 
     if (options.hasOwnProperty(v)) { 
     if (options[prop] === v) { 
      return prop; 
     } 
     } 
    } 
    return null; 

但它的JavaScript有什么内在的,或者是有一个更合适的方法来做到这一点?

+0

你可以尝试array.indexOf( '值');不知道它是否适用于对象 –

+0

不,唉:'未捕获的类型错误:对象#没有方法'indexOf'' – Richard

回答

1

一个对象的属性可以被访问,就像一个关联数组! 这工作就像一个魅力!

var obj = { 
    'key': 'val' 
}; 

alert(obj['key']); 

或者,如果您希望使用一种方法,您可以创建一个原型方法。

Object.prototype.getPropertyByString = function(str) { 
    return this[str]; 
}; 

alert(obj.getPropertyByString('key')); 

编辑:哇,我刚刚注意到我不能回答你的问题,我的歉意!让我获得第二次机会。

没有内置函数,但低于我的作品的脚本!

var obj = { 
    'key': 'val' 
}; 

Object.prototype.getKeyByValue = function(object) { 
    for(var key in this) { 
     if(this.key === object) { 
      return key; 
     } 
    } 

    return null; 
}; 

alert(obj.getKeyByValue('val')); 

它循环遍历该对象,并返回与该值匹配的键。无论这个值是一个int,string,object还是任何东西,这都是值得的。这是因为我使用了严格平等比较(“===”),它也检查对象类型是否相同。

而且,请注意检查,如果该属性存在是愚蠢的,如果你通过对象的所有键循环反正。显然,当你循环所有的键时,它们都存在。

+1

我想使用该值进行检索,而不是关键。 – Richard

+0

是的,我想通了,所以我编辑了我的帖子 –

+0

:)非常感谢 – Richard

2

没有这样的内置方法。而你自己的功能对我来说看起来不错。我无法弄清楚它的任何改进。

+1

'hasOwnProperty'检查可能/将会是一个改进:) – Andreas

+0

@john_doe,在哪里?该代码枚举所有属性。在哪里使用'hasOwnProperty'? – taskinoor

+0

谢谢@john_doe,我添加了一个'hasOwnProperty'检查。这是为了检查继承的属性,对吧? – Richard