遍历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对象是无序的,因此生成的键的顺序可能与原始键的顺序不匹配。本文中的所有示例都假设原始顺序被保留。