有什么方法可以使用属性值获得JavaScript对象的属性名称?

时间:2019-07-18 09:42:54

标签: javascript object key-value

说我有一个像这样的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];

要做到这一点,但这只是漫长的过程。我也明白,当多个键具有相同的值时,这将更加麻烦。我只是想知道是否还有其他方法可以使像这样的事情变得更容易。

2 个答案:

答案 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: 123key2: '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);