JavaScript:对象的filter()
ECMAScript 5 中存在数组类型的filter() 原型,但不存在对象类型。要在 JavaScript 中为对象实现 filter() 函数,您可以使用以下策略:
1.使用reduce() 和Object.keys()
此方法利用reduce() 循环遍历对象的键,并利用Object.keys() 检索这些键。然后,它根据谓词函数过滤键,并返回一个具有过滤后的键值对的新对象:
Object.filter = (obj, predicate) => { Object.keys(obj) .filter(key => predicate(obj[key])) .reduce((res, key) => (res[key] = obj[key], res), {}); };
2。使用map()和Spread语法
与(1)类似的方法,但是你可以使用map()和Spread语法(...)来创建一个新的,而不是reduce()对象:
Object.filter = (obj, predicate) => { Object.keys(obj) .filter(key => predicate(obj[key])) .map(key => ({ [key]: obj[key] })) .reduce((a, b) => ({ ...a, ...b }), {}); };
3。使用 Object.entries() 和 Object.fromEntries()
该方法使用 Object.entries() 将对象转换为键值对数组,然后用 Object.fromEntries() 重构过滤后的对象:
Object.filter = (obj, predicate) => { return Object.fromEntries( Object.entries(obj).filter(([key, value]) => predicate(value)) ); };
4.注意:避免扩展 Object.prototype
虽然这些解决方案为对象提供了功能性的 filter() 实现,但直接扩展 Object.prototype 被认为是不好的做法。相反,将过滤器函数作为独立的实用函数提供,类似于现有的 JavaScript 全局实用函数,如 Object.assign() 和 Object.keys()。
以上是如何有效过滤 JavaScript 对象中的键值对?的详细内容。更多信息请关注PHP中文网其他相关文章!