Object.entries() 是 JavaScript 中的一个内置方法,它用于将一个对象的可枚举属性(键值对)转换为一个二维数组

简单来说,它把对象变成数组,这样你就可以使用数组自带的各种方法(如 map, filter, forEach)来方便地处理对象数据。

1. 基本语法与返回值

Object.entries(obj)
  • 参数obj —— 要处理的对象。
  • 返回值:一个二维数组。数组的每一个元素也是一个数组 [key, value],其中 key 是属性名(字符串),value 是对应的属性值。

2. 直观示例

const person = {
  name: '张三',
  age: 30,
  city: '北京'
};

const entries = Object.entries(person);
console.log(entries);
// 输出: [ ['name', '张三'], ['age', 30], ['city', '北京'] ]

可以看到,对象的 3 个属性被转换成了包含 3 个键值对数组的数组。

3. 常见的应用场景

场景一:遍历对象(替代 for...in

以前遍历对象属性通常用 for...in,但它会遍历原型链上的属性,通常需要配合 hasOwnProperty 使用。而 Object.entries 配合 forEach 更简洁,且只遍历对象自身的属性。

const product = { id: 1, name: '手机', price: 2999 };

// 使用 Object.entries 遍历
Object.entries(product).forEach(([key, value]) => {
  console.log(`${key}: ${value}`);
});
// 输出:
// id: 1
// name: 手机
// price: 2999
场景二:将对象转换为 Map 对象

Map 构造函数接受一个可迭代的键值对数组,Object.entries 的返回值格式正好符合要求。

const user = { name: '李四', age: 25 };
const map = new Map(Object.entries(user));

console.log(map.get('name')); // 输出: 李四
场景三:对象数据过滤或转换

当你想筛选对象中的部分属性,或者对值进行统一处理时,可以先转成数组操作,再转回对象。

const scores = {
  语文: 85,
  数学: 92,
  英语: 78,
  政治: 88
};

// 筛选出分数大于 80 的科目
const highScores = Object.fromEntries(
  Object.entries(scores).filter(([subject, score]) => score > 80)
);

console.log(highScores);
// 输出: { 语文: 85, 数学: 92, 政治: 88 }

注意:上面用到了 Object.fromEntries(),它是 Object.entries() 的逆操作,负责将键值对数组转换回对象。

4. 与 for...in 的区别

特性 Object.entries() for…in 循环
遍历范围 仅对象自身的可枚举属性 对象自身 + 原型链上的可枚举属性
返回值 返回一个数组,可用于链式调用 需要在循环体内手动处理逻辑
适用场景 数据转换、函数式编程、需要数组方法时 简单的属性遍历,且不关心原型链时

5. 注意事项

  1. 顺序:返回的数组顺序与 for...in 循环的顺序一致。对于整数键(如数组索引),会按升序排列;对于普通字符串键,按创建顺序排列。
  2. Symbol 属性Object.entries()忽略键名为 Symbol 类型的属性。如果需要遍历 Symbol 属性,请使用 Object.getOwnPropertySymbols()
  3. 字符串转换:对象的键会被强制转换为字符串。如果原键是数字 { 100: 'a' },在 entries 中会被转为 ['100', 'a']
  4. null/undefined:如果传入 nullundefined,会抛出 TypeError 错误。

总结

Object.entries() 的核心价值在于桥接对象和数组。它把对象这种“散装”的数据结构,转换成数组这种拥有丰富迭代方法的统一格式,让你可以用 mapfilterreduce 等现代 JavaScript 工具来优雅地处理对象数据。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐