在JS中查找对象的特定值的关键字

时间:2017-09-20 11:26:25

标签: javascript arrays object lodash

我有一个使用lodash TCK函数生成的对象。所以我有2个数组,一个位置,一个数字。

TCK

我需要根据输入值返回密钥。例如,_.zipObject()将返回var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147, …}

我已尝试function(304)但这只是返回undefined。我尝试的任何其他尝试总是返回undefined或-1。不确定从哪里开始。

5 个答案:

答案 0 :(得分:2)

使用纯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);

答案 1 :(得分:2)

要查找密钥,请使用带_.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>

答案 2 :(得分: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));

答案 3 :(得分: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));

答案 4 :(得分: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));