说我有一个像这样的JavaScript对象:
var myObject = {
key1: "value1",
key2: "value2",
key3: "value3"
}
我们都知道我可以使用value1
来获得myObject ['key1']
,但是有什么办法可以做相反的事情,例如myObject ["value1"]
返回'key1'
吗?
我知道我可以使用
var values = Object.values (myObject);
var index = values.indexOf ("value1");
var keys = Object.keys (myObject);
keys [index];
要做到这一点,但这只是漫长的过程。我也明白,当多个键具有相同的值时,这将更加麻烦。我只是想知道是否还有其他方法可以使像这样的事情变得更容易。
答案 0 :(得分:3)
我将创建一个可以反转键和值的对象,然后使用普通的属性查找:
var myObject = {
key1: "value1",
key2: "value2",
key3: "value3"
}
var reversedObj = Object.fromEntries(
Object.entries(myObject).map(entries => entries.reverse())
);
console.log(reversedObj.value1);
console.log(reversedObj.value3);
但是请记住,这取决于唯一的值。
如果您需要区分字符串值和非字符串值,例如key1: 123
与key2: '123'
,请改用Map(因为普通对象只能具有字符串(和符号)键,但是Map键可以是任何类型)
var myObject = {
key1: 123,
key2: "123",
key3: "value3"
}
var reversedMap = new Map(
Object.entries(myObject).map(entries => entries.reverse())
);
console.log(reversedMap.get('123'));
console.log(reversedMap.get(123));
答案 1 :(得分:1)
当然,您可以遍历键并按值过滤: 值不必唯一,您将获得一个键数组。 而且您不必事先反转对象。
const obj = {a: 1, b: 2};
const value = 1;
const keys = Object.keys(obj).filter(key => obj[key] === value);
console.log(keys);