Skip to content
📈0️⃣

对象的遍历方法

对象的遍历方法

1. Object.keys() 方法

  • 语法简介: Object.keys(obj) 方法返回一个数组,包含给定对象的所有可枚举属性的名称。
  • 使用场景: 适用于遍历对象的属性名并进行相关操作,例如根据属性名获取属性值或对属性名进行条件判断。
javascript
const obj = { a: 1, b: 2, c: 3 };
const keys = Object.keys(obj);

keys.forEach((key) => {
  console.log(key); // 输出 'a', 'b', 'c'
});

2. Object.values() 方法

  • 语法简介: Object.values(obj) 方法返回一个数组,包含给定对象的所有可枚举属性的值。
  • 使用场景: 通常用于遍历对象的属性值并进行相应操作,比如对属性值进行处理或筛选出符合条件的属性值。
javascript
const obj = { a: 1, b: 2, c: 3 };
const values = Object.values(obj);

values.forEach((value) => {
  console.log(value); // 输出 1, 2, 3
});

3. Object.entries() 方法

  • 语法简介: Object.entries(obj) 方法返回一个数组,其中每个元素是一个包含给定对象的可枚举属性的键-值对的数组。
  • 使用场景: 适用于需要同时访问对象的属性名和属性值,并在遍历过程中进行进一步处理或操作的情况。
javascript
const obj = { a: 1, b: 2, c: 3 };
const entries = Object.entries(obj);

entries.forEach(([key, value]) => {
  console.log(`${key}: ${value}`); // 输出 'a: 1', 'b: 2', 'c: 3'
});

4. Object.getOwnPropertyNames() 方法

  • 语法简介: Object.getOwnPropertyNames(obj) 方法返回一个数组,包含给定对象的所有属性的名称,包括不可枚举属性。
  • 使用场景: 当需要获取对象的所有属性名(无论是否可枚举)并进行相应操作时,可以使用这个方法。
javascript
const obj = Object.create(
  {},
  {
    a: {
      value: 1,
      enumerable: true,
    },
    b: {
      value: 2,
      enumerable: false,
    },
  }
);
const propNames = Object.getOwnPropertyNames(obj);

propNames.forEach((prop) => {
  console.log(prop); // 输出 'a', 'b'
});

这些对象遍历方法提供了灵活的方式来操作对象的属性和值,在不同的场景下可以根据需要选择使用。

遍历方法扩展

1. entries 与 fromEntries

Object.entries() 方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环会枚举原型链中的属性)。

fromEntries() 方法是 Object.entries() 的逆操作,它将一个键值对数组转换为一个对象。

示例:

javascript
const obj = { a: 1, b: 2, c: 3 };

// 使用 Object.entries() 将对象转换为键值对数组
const entries = Object.entries(obj);
console.log(entries); // [['a', 1], ['b', 2], ['c', 3]]

// 使用 fromEntries() 将键值对数组转换回对象
const newObj = Object.fromEntries(entries);
console.log(newObj); // { a: 1, b: 2, c: 3 }

2. for...in 与 for...of

for...infor...of 是两种用于遍历集合(如数组或对象)的不同循环语句,它们有以下区别:

1. for...in 循环

  • 适用对象: 用于遍历对象的可枚举属性。
  • 语法:
    javascript
    for (variable in object) {
      // code block to be executed
    }
  • 特点: 遍历对象自身及继承的可枚举属性(包括原型链上的属性)。
  • 注意事项:
    • 不仅遍历对象自身的属性,还会遍历继承来的属性。
    • 返回的是属性名(字符串类型)而非属性值。

2. for...of 循环

  • 适用对象: 用于遍历具有迭代器(Iterator)接口的可迭代对象,例如数组、字符串、Map、Set 等。
  • 语法:
    javascript
    for (variable of iterable) {
      // code block to be executed
    }
  • 特点: 遍历集合中的元素(例如数组中的值),不包括对象的属性。
  • 注意事项:
    • 可以遍历数组、字符串、Map、Set 等实现了迭代器接口的数据结构。
    • 返回的是集合中的元素值,而非属性名。

综上所述,for...in 主要用于遍历对象的属性,for...of 主要用于遍历具有迭代器接口的集合(例如数组)。