Skip to content

遍历JavaScript对象的自有属性

Array.prototype.forEach() 是遍历数组的好方法,但它对对象不起作用。然而,借助于 Object.keys(),我们可以很容易地创建自己的对象属性迭代器

遍历对象属性

如前所述,我们只需要使用 Object.keys() 来获取对象的所有属性,然后使用 Array.prototype.forEach() 来为每个键值对运行提供的函数。回调函数应该接收三个参数 - 值、键和对象本身。

const forOwn = (obj, fn) =>
  Object.keys(obj).forEach(key => fn(obj[key], key, obj));

forOwn({ foo: 'bar', a: 1 }, v => console.log(v));
// 输出:'bar', 1

反向遍历对象属性

如果你需要反向遍历对象的属性,你可以使用 Array.prototype.reverse() 来反转键的顺序,然后再遍历它们。

const forOwnRight = (obj, fn) =>
  Object.keys(obj)
    .reverse()
    .forEach(key => fn(obj[key], key, obj));

forOwnRight({ foo: 'bar', a: 1 }, v => console.log(v));
// 输出:1, 'bar'

[!WARNING]

由于JavaScript对象是无序的,因此生成的键的顺序可能与原始键的顺序不匹配。本文中的所有示例都假设原始顺序被保留。