对象的JavaScript filter() 方法
虽然Array 类型有filter() 方法,但Object 类型没有。本文旨在提供实现此类方法的解决方案。
自定义对象过滤器实现
一种方法涉及扩展 Object.prototype:
Object.prototype.filter = function(predicate) { var result = {}; for (key in this) { if (this.hasOwnProperty(key) && !predicate(this[key])) { result[key] = this[key]; } } return result; };
替代解决方案
但是,扩展全局原型一般不鼓励。相反,请考虑以下替代方案:
1。使用Reduce和Object.keys
Object.filter = (obj, predicate) => Object.keys(obj) .filter(key => predicate(obj[key])) .reduce((res, key) => (res[key] = obj[key], res), {});
2.映射和传播语法
Object.filter = (obj, predicate) => Object.fromEntries( Object.entries(obj) .filter(([key, value]) => predicate(value)) .map(([key, value]) => [key, value]) );
3. Object.assign
const filter = (obj, predicate) => Object.assign( {}, ...Object.keys(obj) .filter(key => predicate(obj[key])) .map(key => ({[key]: obj[key]})) );
用法示例
var foo = { bar: "Yes", moo: undefined }; var filtered = Object.filter(foo, property => typeof property === "undefined"); console.log(filtered); // { moo: undefined }
以上是如何过滤 JavaScript 对象中的属性?的详细内容。更多信息请关注PHP中文网其他相关文章!