如何获取对象的所有键或值?

在处理JavaScript对象时,获取其所有键名或键值是常见的需求。无论是为了迭代、序列化还是数据转换,ES5及后续版本都提供了直接且标准的方法来完成这些操作。

获取对象的所有键

Object.keys() 方法返回一个由给定对象自身的、可枚举属性名组成的数组。这个数组的顺序与使用for...in循环遍历该对象时返回的顺序一致(首先按数字升序排列字符串键,然后按创建顺序排列其他字符串键)。

const person = {
  name: 'Alice',
  age: 30,
  job: 'Engineer'
};
const keys = Object.keys(person);
console.log(keys); // ['name', 'age', 'job']

这个方法非常实用,因为它返回的是一个标准的数组,你可以直接在其上使用mapfilterforEach等方法。它只返回对象自身的属性,不包含其原型链上的属性。

获取对象的所有值

与获取键相对应,Object.values() 方法返回一个由给定对象自身的、可枚举属性值组成的数组。其值的顺序与Object.keys()提供的顺序相同。

const values = Object.values(person);
console.log(values); // ['Alice', 30, 'Engineer']

这个方法是ES2017(ES8)中引入的,它为我们直接访问对象的值集合提供了便利,无需先获取键再映射取值。

获取对象的键值对数组

有时你需要同时获取键和值。Object.entries() 方法返回一个由给定对象自身的、可枚举属性的键值对组成的数组。每个键值对是一个包含两个元素的数组:[key, value]

const entries = Object.entries(person);
console.log(entries);
// [['name', 'Alice'], ['age', 30], ['job', 'Engineer']]

这在将对象转换为Map,或者需要同时操作键和值的场景下尤其有用。你可以直接使用for...of循环遍历这些条目。

处理非自身属性的遍历

上述三个方法都只处理对象自身的可枚举属性。如果你需要遍历包括原型链上继承的属性,可以使用for...in循环。但通常,在处理具体数据时,我们更关心对象自身拥有的属性。

for (let key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key, person[key]);
  }
}

for...in循环内部使用hasOwnProperty()检查,可以确保只处理对象自身的属性,避免意外访问到继承的属性。

这些静态方法构成了操作对象属性的基础工具链。它们返回的都是数组,这使得函数式编程变得非常方便。例如,你可以使用Object.entries()将对象转化为数组,进行复杂的过滤或映射操作,再使用Object.fromEntries()将处理后的数组重新组合成对象。掌握它们能极大地提升你操作数据的效率。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

    暂无评论内容