在JavaScript中查找对象特定值的键。

4

我有一个对象,它是通过使用Lodash的_.zipObject()函数生成的。因此,我有两个数组,一个是位置,一个是数字。

var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147, …}

我需要根据输入值返回对应的键。例如,function(304) 应该返回 'Aberdeen'

我尝试过使用 _.findkey(locs, 304);,但是它只会返回 undefined。我尝试了其他方法,但都返回 undefined 或者 -1。不太确定该怎么办。

5个回答

5
使用纯Javascript,使用Object#keys函数获取所有键,然后在Array#find函数中与您的元素进行比较。

const obj = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147};

const key = Object.keys(obj).find(key => obj[key] === 304);

console.log(key);

使用lodash将谓词传递到函数中

const key = _.findkey(locs, (value) => value === 304);

5

使用带有_.findKey()的谓词函数来查找密钥:

var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147 };

var key = _.findKey(locs, function(v) {
  return v === 304;
});

console.log(key);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

您可以通过将_.eq()和所请求的值进行柯里化来创建谓词:

var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147 };

var key = _.findKey(locs, _.curry(_.eq, 304));

console.log(key);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>


1
您可以使用自定义函数来查找关键字:
function findKey(dataObj, value){

    for(var key in dataObj){
        if(dataObj.hasOwnProperty(key) && dataObj[key] == value){
            return key;
        }
    }

    return false;

}

var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147, …}

console.log(findKey(locs, 304));

1
你可以使用Object.keys()方法获取所有键,然后使用.find()函数从该数组中获取键,然后将其包装在一个函数中,使其模块化。
var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147, …}    
Object.prototype.getKey = function(value) {    
  var object = this;    
  return Object.keys(object).find(key => object[key] === value);    
};    
alert(locs.getKey(304));

0
你可以这样做:

var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147}

const getKeyByValue = (obj, value) => 
        Object.keys(obj).find(key => obj[key] === value);

console.log(getKeyByValue(locs, 304));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接