有没有办法使用属性值/是获取 JavaScript 对象属性名称? [复制]
Posted
技术标签:
【中文标题】有没有办法使用属性值/是获取 JavaScript 对象属性名称? [复制]【英文标题】:Is there any way to get a JavaScript object's property name/s using property value/s? [duplicate] 【发布时间】:2019-11-27 05:10:20 【问题描述】:假设我有一个这样的 javascript 对象:
var myObject =
key1: "value1",
key2: "value2",
key3: "value3"
我们都知道我可以通过使用myObject ['key1']
得到value1
,但是有什么方法可以反过来,比如myObject ["value1"]
返回'key1'
?
我知道我可以使用
var values = Object.values (myObject);
var index = values.indexOf ("value1");
var keys = Object.keys (myObject);
keys [index];
要做到这一点,但这只是啰嗦。我也明白,当多个键具有相同的值时,这会更加麻烦。我只是想知道是否有其他方法可以让这样的事情变得更容易。
【问题讨论】:
为什么不直接翻转键/值? 【参考方案1】:当然,您可以遍历键并按值过滤: 值不必是唯一的,您将获得一组键。 而且您不必事先反转对象。
const obj = a: 1, b: 2;
const value = 1;
const keys = Object.keys(obj).filter(key => obj[key] === value);
console.log(keys);
【讨论】:
谢谢。当值不唯一时,这将非常有用。 如果您只需要一个值,您可以将filter
替换为find
。
没问题。请记住,接受的答案不适用于数值,而且速度要慢得多。【参考方案2】:
我会创建一个反转键和值的对象,然后使用普通的属性查找:
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
vs 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));
【讨论】:
哇。谢谢你的快速反应。这正是我想要的。以上是关于有没有办法使用属性值/是获取 JavaScript 对象属性名称? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用 javascript/Jquery 将未提交的输入字段的值属性作为 URL 的参数传递?