Javascript提高:Object.entries()的应用-由Deepseek产生
的核心价值在于桥接对象和数组。它把对象这种“散装”的数据结构,转换成数组这种拥有丰富迭代方法的统一格式,让你可以用mapfilterreduce等现代 JavaScript 工具来优雅地处理对象数据。
·
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. 注意事项
- 顺序:返回的数组顺序与
for...in循环的顺序一致。对于整数键(如数组索引),会按升序排列;对于普通字符串键,按创建顺序排列。 - Symbol 属性:
Object.entries()会忽略键名为Symbol类型的属性。如果需要遍历 Symbol 属性,请使用Object.getOwnPropertySymbols()。 - 字符串转换:对象的键会被强制转换为字符串。如果原键是数字
{ 100: 'a' },在entries中会被转为['100', 'a']。 - null/undefined:如果传入
null或undefined,会抛出TypeError错误。
总结
Object.entries() 的核心价值在于桥接对象和数组。它把对象这种“散装”的数据结构,转换成数组这种拥有丰富迭代方法的统一格式,让你可以用 map、filter、reduce 等现代 JavaScript 工具来优雅地处理对象数据。
更多推荐



所有评论(0)