首页 >web前端 >js教程 >如何有效过滤 JavaScript 对象中的键值对?

如何有效过滤 JavaScript 对象中的键值对?

Barbara Streisand
Barbara Streisand原创
2024-11-24 07:04:11748浏览

How can I effectively filter the key-value pairs in a JavaScript object?

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中文网其他相关文章!

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