首页  >  文章  >  web前端  >  如何在 JavaScript 中为对象实现自定义“filter()”方法?

如何在 JavaScript 中为对象实现自定义“filter()”方法?

Patricia Arquette
Patricia Arquette原创
2024-11-13 12:13:02772浏览

How to Implement a Custom `filter()` Method for Objects in JavaScript?

JavaScript:为对象实现自定义 filter() 方法

ECMAScript 5 规范引入了数组的 filter() 原型,但没有引入对于物体。通常不鼓励扩展 JavaScript 的内置对象。但是,如果需要,可以使用以下方法为对象创建自定义 filter() 功能:

1.使用reduce()和Object.keys()

Object.filter = (obj, predicate) =>
  Object.keys(obj)
    .filter(key => predicate(obj[key]))
    .reduce((res, key) => (res[key] = obj[key], res), {});

// Example:
const scores = {
  John: 2,
  Sarah: 3,
  Janet: 1
};
const filtered = Object.filter(scores, score => score > 1);
console.log(filtered);

2.将reduce()和Object.keys()与Object.assign()结合使用

Object.filter = (obj, predicate) =>
  Object.keys(obj)
    .filter(key => predicate(obj[key]))
    .reduce((res, key) => Object.assign(res, { [key]: obj[key] }), {});

// Example: same as above

3.使用map()和展开语法

Object.filter = (obj, predicate) =>
  Object.fromEntries(
    Object.entries(obj)
      .filter(([key, value]) => predicate(value))
      .map(([key, value]) => [key, value])
  );

// Example: same as above

4.使用 Object.entries() 和 Object.fromEntries()

Object.filter = (obj, predicate) =>
  Object.fromEntries(
    Object.entries(obj).filter(([key, value]) => predicate(value))
  );

// Example: same as above

请记住,扩展内置原型可能会产生意想不到的后果。通常最好将自定义函数作为独立实用程序提供,或者专门针对特定功能扩展全局对象。

以上是如何在 JavaScript 中为对象实现自定义“filter()”方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn