Object 根据值找键

在 JavaScript 中,对象是一种重要的数据结构,用于储存和组织数据。对象由键值对组成,其中键名用于查找值。但有时候,我们所知道的只是对象中的某个值,需要找到对应的键名。举个简单的例子:

1
2
3
4
5
const person = {
name: 'John',
age: 30,
city: 'New York'
}

这里我们有一个 person 对象,包含三个键值对。如果我知道这个人的年龄是 30,但不知道对应键名,我该如何获取呢?
为了在 JavaScript 对象中灵活查找键和值,我们需要了解几种遍历对象的方法。

  1. 获取键和值:Object.keys() 方法返回一个数组,包含对象的所有键名。
    Object.values() 方法返回一个数组,包含对象的所有值。使用这两个方法,我们可以轻松获取对象的所有键和值。例如:
1
2
3
4
5
6
7
8
9
10
11
const person = {
name: 'John',
age: 30,
city: 'New York'
}

const keys = Object.keys(person);
// ['name', 'age', 'city']

const values = Object.values(person);
// ['John', 30, 'New York']
  1. 对象遍历:对象遍历指的是迭代对象的属性并访问其键值。主要有以下几种方式:
    for..in 遍历键:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const person = {
    name: 'John',
    age: 30,
    city: 'New York'
    }

    for (let key in person) {
    console.log(key, person[key]);
    }
    // name John
    // age 30
    // city New York

for..of 遍历值:

1
2
3
4
5
6
for (let value of Object.values(person)) {
console.log(value);
}
// John
// 30
// New York

Object.entries() 遍历键值对:

1
2
3
4
5
6
for (let [key, value] of Object.entries(person)) {
console.log(key, value);
}
// name John
// age 30
// city New York

  1. 根据值获取键:

Object.entries() + Array.find():通过 Array.find() 直接找到第一个符合条件的键值对,返回键。

1
2
3
const obj = { a: 1, b: 2, c: 1 };
const key = Object.entries(obj).find(([_key, value]) => value === 1)[0];
console.log(key); // a

Object.entries():返回对象所有键值对的数组,然后你可以迭代检查每个键值对,找到你要的键。

1
2
3
4
5
6
const obj = { a: 1, b: 2, c: 1 };
for (let [key, value] of Object.entries(obj)) {
if (value === 1) {
console.log(key); // a or c
}
}

Object.keys():返回对象所有的键,然后你可以迭代检查每个键对应的值,找到你要的键。

1
2
3
4
5
6
7
const obj = { a: 1, b: 2, c: 1 };
const keys = Object.keys(obj);
for (let key of keys) {
if (obj[key] === 1) {
console.log(key); // a or c
}
}

以上三种方法根据对象的值查找对应的键名。 Object.entries() + Array.find() 方法性能最高,其余两种方法性能稍差。