Найти ключ для конкретного значения на объекте в JS

1

У меня есть объект как таковой, который был сгенерирован с помощью функции lodash _.zipObject(). Итак, у меня есть 2 массива, одно из мест, одно из чисел.

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

Мне нужно вернуть ключ на основе входного значения. Например, function(304) вернет 'Aberdeen'.

Я пробовал _.findkey(locs, 304); но это просто возвращает undefined. Любая другая попытка, которую я пробовал, всегда возвращает либо неопределенный, либо -1. Не совсем уверен, куда идти отсюда.

Теги:
object
arrays
lodash

4 ответа

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>

Вы можете создать предикат путем currying _.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

С помощью чистого Javascript используйте клавиши Object #, чтобы получить все ключи, а затем сравнить с вашим элементом в функции поиска Array #

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

Вы можете использовать пользовательскую функцию для поиска ключа:

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));
0

Вы можете просто получить все ключи с помощью 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));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню