给对象添加 filter 方法
es6 中数组类型拥有 filter 方法,但有时我们会需要让对象类型也使用这个方法,例如有这么一个对象:
1 | const person = { |
那么是否可以在Object.prototype上增加 filter 方法用来给所有对象使用呢?
1 | Object.prototype.filter = function (predicate) { |
答案是不允许的,因为所有引用类型的原型链上都有Object.prototype,所以这会导致这些类型都被莫名奇妙地增加了这个方法。所以,在Object上新增方法更加合适,例如:
- 使用
Object.keys和reduce实现
1 | Object.filter = (obj, predicate) => { |
- 使用
Ojbect.assign展开运算符和Object.map代替上面的reduce
1 | Object.filter = (obj, predicate) => |
- 使用
Object.entries和Object.fromEntries
1 | Object.filter = (obj, predicate) => |
注意:Object.fromEntries属于ES2019,有兼容性问题。