매우 간단한 JavaScript 객체가 있는데 연관 배열로 사용합니다. 값의 키를 얻을 수있는 간단한 기능이 있습니까? 아니면 객체를 반복하고 수동으로 찾아야합니까?
답변
Underscore.js 라이브러리를 사용하여 :
var hash = {
foo: 1,
bar: 2
};
(_.invert(hash))[1]; // => 'foo'
답변
function getKeyByValue(object, value) {
return Object.keys(object).find(key => object[key] === value);
}
ES6, 프로토 타입 돌연변이 또는 외부 라이브러리 없음.
예,
function getKeyByValue(object, value) {
return Object.keys(object).find(key => object[key] === value);
}
const map = {"first" : "1", "second" : "2"};
console.log(getKeyByValue(map,"2"));
답변
사용 가능한 표준 방법이 없습니다. 반복해야하며 간단한 도우미를 만들 수 있습니다.
Object.prototype.getKeyByValue = function( value ) {
for( var prop in this ) {
if( this.hasOwnProperty( prop ) ) {
if( this[ prop ] === value )
return prop;
}
}
}
var test = {
key1: 42,
key2: 'foo'
};
test.getKeyByValue( 42 ); // returns 'key1'
주의 사항 : 위의 방법으로 작동하더라도 일반적으로 호스트 또는 기본 객체를 확장하는 것은 좋지 않습니다 .prototype
. 문제에 잘 맞기 때문에 여기에서했습니다. 어쨌든, 아마도이 함수를 외부에서 사용해야 .prototype
하고 대신 객체를 전달해야합니다.
답변
언급했듯이 반복이 필요합니다. 예를 들어 최신 브라우저에서는 다음을 수행 할 수 있습니다.
var key = Object.keys(obj).filter(function(key) {return obj[key] === value})[0];
어디 value
찾고자하는 가치가있는 . 나는 아마도 루프를 사용할 것이라고 말했다.
그렇지 않으면 적절한 “hashmap”객체를 사용할 수 있습니다. JS에는 여러 가지 구현이 있거나 직접 구현할 수 있습니다.
2018 업데이트
6 년이 지났지 만 여전히 투표권을 얻었으므로 현대 브라우저 / 환경을위한보다 현대적인 솔루션처럼 의견 자체가 아니라 답변 자체에서 언급해야합니다.
const key = Object.keys(obj).find(key => obj[key] === value);
물론 그것은 또한 함수가 될 수 있습니다 :
const getKeyByValue = (obj, value) =>
Object.keys(obj).find(key => obj[key] === value);
답변
lodash 방식 https://lodash.com/docs#findKey
var users = {
'barney': { 'age': 36, 'active': true },
'fred': { 'age': 40, 'active': false },
'pebbles': { 'age': 1, 'active': true }
};
_.findKey(users, { 'age': 1, 'active': true });
// → 'pebbles'
답변
function extractKeyValue(obj, value) {
return Object.keys(obj)[Object.values(obj).indexOf(value)];
}
컴파일 후 알 수없는 키 이름을 추출하기 위해 클로저 컴파일러를 위해 제작되었습니다.
더 섹시한 버전이지만 미래를 사용 Object.entries
기능 사용
function objectKeyByValue (obj, val) {
return Object.entries(obj).find(i => i[1] === val);
}
답변
ES6 + 원 라이너
let key = Object.keys(obj).find(k=>obj[k]===value);
값이있는 모든 키를 반환하십시오.
let keys = Object.keys(obj).filter(k=>obj[k]===value);