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

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

Barbara Streisand
发布: 2024-11-24 07:04:11
原创
803 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板