何时/为何在 for 循环上使用 map/reduce

2024-02-22

我第一次接触 JavaScript 中的对象操作,我有一个问题,想知道是否有人可以回答。

当我想要操作一个对象时,我可以在一些嵌套的 for 循环范围内执行某些操作,但是 JavaScript 中内置了一些函数,例如 map/reduce/filter,以及像 lodash/underscore 这样的库。

我认为后者(映射/减少/过滤器和库)是更好的做法,但我只是好奇为什么。

我正在做一些非常基本的对象操作,可以通过一些适当的 for 循环来解决,以获取和更改对象中的正确键/值,但可以使用 JS 中的函数/库轻松完成。只是好奇它们如何更好 - 比如更好的性能/更干净的代码/易于使用/其他什么。

抱歉,没有代码。我非常感谢任何帮助我在这里了解更多的人。

编辑 - 所以从 map() 的示例中获取

我可以以 javascript.map 为例

 var kvArray = [{key:1, value:10}, {key:2, value:20}, {key:3, value: 30}];
var reformattedArray = kvArray.map(function(obj){ 
var rObj = {};
rObj[obj.key] = obj.value;
return rObj;
});

我可以做类似的事情

   var kvArray = [{key:1, value:10}, {key:2, value:20}, {key:3, value: 30}];
var reformattedArray = [];

for(var object in kvArray){
  //combine both values into object inside of kvArray[object]);
 };

代码少了很多 - 但还有其他值得了解的好处吗?


我知道我正在回复一个旧答案,但只是想向未来的读者指出。

映射归约和过滤函数来自函数式编程世界。

这些是 Lisp、Haskell 等语言中的一流内置运算符(ml?)。 函数式语言倾向于在不可变数据上运行运算符,而不是让代码在数据上运行以对其进行操作(例如循环)。 因此,与提供 for 和 while 循环相比,它们提供了更简单但功能强大的接口,例如 map、filter 和 reduce。

它还可以帮助他们满足其他要求,例如不变性等。这就是为什么地图会给你一张新地图而不是改变旧地图。从并发的角度来看,它们非常好,尽管它们在某些情况下可能会更慢。

这种方法通常会减少多线程或高并发应用程序中的代码错误。 当多个参与者对同一条数据进行操作时,不变性有助于防止代码互相干扰。

由于 javascript 试图通过提供函数式编程语言的一些功能来实现部分函数式,因此在其中实现映射、过滤和归约函数也可能是有意义的。

YMMV 取决于您使用提供的工具做什么。

如果您的代码使用 for 循环效果更好,请继续使用。

但是,如果您发现异步代码正在咀嚼公共数据,那么您最终会在尝试调试循环时束手无策。 打个招呼,进行映射、减少和过滤。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时/为何在 for 循环上使用 map/reduce 的相关文章

随机推荐

  • 无法通过 Unity 在 Android 上启动活动

    我正在使用 Unity 创建 Android 应用程序 我有两个插件 每个单独工作都很好 但是当我想要同时使用它们时 我无法在它们之间切换活动 在过去的十天里 我阅读了所有类似的问题 并尝试了从反编译 编辑 重新编译 Java 代码到从 U
  • 设置辅助功能上的窗口级别

    我正在开发一个 Mac OS X 应用程序 它操纵属于另一个应用程序的窗口 我为此使用辅助功能 我已经成功移动窗口并从我的应用程序查询其属性 现在我需要使窗口 始终位于顶部 基于另一个帖子 https stackoverflow com q
  • Java (JSP):在“子 jsp”中重复 contentType 标头

    当一个 jsp 中的标头重复包含在另一个 jsp 中时会发生什么情况 例如如果示例 jsp以此开始
  • 在不带“with”的情况下对 data.table 进行键控查找

    我有一个data table像这样的结构 除了我的真的很大 dt lt data table x 1 5 y 3 7 key x 我想通过以下方式查找该结构中的行another名称为的变量x 注意 与密钥的名称相同dt x lt 3 4 d
  • Google 日历 API 和 OAuth 问题

    我收到错误 com google gdata util AuthenticationException Unknown authorization header at com google gdata client http HttpGDa
  • 使用 Node.js 进行 Javascript 异步异常处理

    我目前正在开发一个 Node js 应用程序 并且遇到了常见的异步代码问题 我正在 Node 的 HTTP 模块之上实现一个服务服务器 该服务器支持 类似express 路由 例如 我的代码如下所示 server any someRoute
  • 使用掩码验证 IP 的 HTML5 模式

    我正在尝试为输入文本创建一个 HTML5 模式 其中包含 IP 地址和掩码 如下所示 10 120 15 30 28 或 172 181 30 0 24 我发现了一种 html5 模式http html5pattern com Miscs
  • 在多处理器机器上执行 C++ 程序

    我出于研究目的用 C 开发了一个程序 需要几天时间才能完成 现在我在我们的实验室 8 核服务器机器上执行它以快速获得结果 但我看到机器只为我的程序分配一个处理器 并且它的处理器使用率保持在 13 即使我将进程优先级设置为高级别并与 8 核相
  • 如何将edittext中的数据存储到android sqlite数据库中?

    我是 Android 的新开发人员 我想使用 sqlite 将用户数据存储在数据库中 对于该设计 xml 文件用户名作为 edittext 并采用按钮 在填写所有文本字段后 单击按钮时所有数据都存储在数据库中 并在屏幕上显示这些数据 这些都
  • 从不同文件夹渲染部分(不共享)

    如何让视图从不同的文件夹渲染部分 用户控件 在预览版 3 中 我曾经使用完整路径调用 RenderUserControl 但升级到预览版 5 后 这不再可能了 相反 我们得到了 RenderPartial 方法 但它没有提供我正在寻找的功能
  • QLDB 中的分页

    我注意到 QLDB 不支持LIMIT or SKIP实现基本分页所需的查询参数 将来是否会支持此功能 或者是否有其他方法在 QLDB 中实现分页 目前不支持 LIMIT SKIP QLDB 专为数据摄取而构建 我们建议在另一个专门构建的数据
  • 最佳 MySQL 配置 (my.cnf)

    以下是我的默认生产MySQL配置文件 my cnf 用于以 InnoDB 作为默认存储引擎的纯 UTF 8 设置 server bind address 127 0 0 1 innodb file per table default cha
  • 在 PHP 中使用另一个条件的变量

    我有这个代码 if isset GET act display gt display templates install main html if isset POST proceed prefix POST prefix if GET a
  • 使用@Transactional和Spring模板有什么区别?

    如果我在 DAO 中使用 Transactional 我的所有 EntityManager 查询是否都会通过提交和关闭进行封装 或者我需要使用Spring模板 JPA模板 Hibernate模板 使用 Transactional和Sprin
  • 使用 Genymotion 和 Charles 进行 SSL 代理?

    我正在尝试让 Genymotion Virtualbox 中托管的 x86 Android 模拟器 与 Charles 代理一起使用 我已成功使用网关 ip 虚拟机配置为使用仅主机适配器 fwiw 将设备连接到设备 wifi 代理设置中的代
  • 从 Excel 单元格读取十进制值(在 C# 中)

    从包含小数的 Excel 单元格读取值时 我遇到以下问题 如果我在 Excel 的单元格中输入 9 95 CellValue InnerText在 C 中返回 9 9499999999999993 我怎样才能获得输入的实际值 即 9 95
  • 使用 geotools api 在 WGS84 crs 中线段和点之间的最短距离

    在geotools中 您可以使用Geometry类中的距离函数找到两个几何图形之间的距离 几何有一个点子类 但没有几何的线段子类 然而 有一个 LineSegment 类派生自 LineString 它不是 Geometry 类的子类 我尝
  • JAX-RS 非常适合实现 REST。在 Java 中使用什么来调用 REST 服务? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 理想情况下 我正在寻找类似 JAX RS 的东西 使用注释来描述我想要调用的服务 但允许调用使用其他技术 不是 JAX RS 实现的 RE
  • javascript(类java)哈希码实现

    以下代码是我对相当通用的 javascript 哈希代码实现的尝试 我计划将此代码与哈希表实现 例如 jshashtable 结合使用 该哈希表实现使用 hashCode 如果为键定义 我尝试严格遵守 java 的数字 字符串和数组的哈希码
  • 何时/为何在 for 循环上使用 map/reduce

    我第一次接触 JavaScript 中的对象操作 我有一个问题 想知道是否有人可以回答 当我想要操作一个对象时 我可以在一些嵌套的 for 循环范围内执行某些操作 但是 JavaScript 中内置了一些函数 例如 map reduce f