Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从对象中按值检索?_Javascript - Fatal编程技术网

Javascript 从对象中按值检索?

Javascript 从对象中按值检索?,javascript,Javascript,这一定是重复的,但我一直在谷歌上搜索“从对象javascript中按值检索”和“javascript按值查找对象”以及所有变体,结果一无所获,所以道歉,现在开始 假设我有一个JavaScript对象,如下所示: var options = {"ford": "red", "citroen": "blue"}; 如何查找值blue以返回雪铁龙 我想,总是有“编写自己的函数”的路线: function returnbyValue(options, v): for (var prop in

这一定是重复的,但我一直在谷歌上搜索“从对象javascript中按值检索”和“javascript按值查找对象”以及所有变体,结果一无所获,所以道歉,现在开始

假设我有一个JavaScript对象,如下所示:

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”
A
hasOwnProperty
check可能/会是一个改进:)@john\u doe,在哪里?代码正在枚举所有属性。在哪里使用
hasOwnProperty
?谢谢@john_doe,我添加了一个
hasOwnProperty
检查。这是为了检查继承的属性,对吗?@taskinoor:
如果(options.hasOwnProperty(prop)和&options[prop]==v){
--@Richard:是的。如果你的对象没有你要找的道具,但原型链上的任何东西都有,你会忽略它。如果没有hasOwnProperty,“上面”的“漂亮”东西将返回我希望使用值而不是键检索。