Javascript 从对象中按值检索?
这一定是重复的,但我一直在谷歌上搜索“从对象javascript中按值检索”和“javascript按值查找对象”以及所有变体,结果一无所获,所以道歉,现在开始 假设我有一个JavaScript对象,如下所示:Javascript 从对象中按值检索?,javascript,Javascript,这一定是重复的,但我一直在谷歌上搜索“从对象javascript中按值检索”和“javascript按值查找对象”以及所有变体,结果一无所获,所以道歉,现在开始 假设我有一个JavaScript对象,如下所示: var options = {"ford": "red", "citroen": "blue"}; 如何查找值blue以返回雪铁龙 我想,总是有“编写自己的函数”的路线: function returnbyValue(options, v): for (var prop in
var options = {"ford": "red", "citroen": "blue"};
如何查找值blue
以返回雪铁龙
我想,总是有“编写自己的函数”的路线:
function returnbyValue(options, v):
for (var prop in options) {
if (options.hasOwnProperty(v)) {
if (options[prop] === v) {
return prop;
}
}
}
return null;
但是JavaScript是否内置了任何东西,或者有没有更简洁的方法来实现这一点?没有这样的内置方法。我觉得你自己的功能不错。我想不出有什么改进 可以像关联数组一样访问对象的属性! 这很有魅力
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还是其他任何值,这都会起作用。这是因为我使用了严格的相等比较(“==”),它还检查对象类型是否相同
另外,请注意,如果仍然在循环对象的所有键,那么检查属性是否存在是愚蠢的。显然,当您循环遍历所有键时,它们是存在的。您可以尝试array.indexOf('value');不知道它是否适用于objectsNo,唉:
UncaughtTypeError:Object#没有方法“indexOf”
AhasOwnProperty
check可能/会是一个改进:)@john\u doe,在哪里?代码正在枚举所有属性。在哪里使用hasOwnProperty
?谢谢@john_doe,我添加了一个hasOwnProperty
检查。这是为了检查继承的属性,对吗?@taskinoor:如果(options.hasOwnProperty(prop)和&options[prop]==v){
--@Richard:是的。如果你的对象没有你要找的道具,但原型链上的任何东西都有,你会忽略它。如果没有hasOwnProperty,“上面”的“漂亮”东西将返回我希望使用值而不是键检索。