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

标签 javascript

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

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

我认为后者(map/reduce/filter 和库)是更好的做法,但我只是好奇为什么。

我正在做一些非常基本的对象操作,可以通过一些适当的 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]);
 };

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

最佳答案

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

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

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

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

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

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

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

如果您的代码使用 for 循环效果更好,那就使用它。

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

关于javascript - 何时/为何在 for 循环上使用 map/reduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42127891/

相关文章:

javascript - 如何在谷歌应用程序脚本中返回对象

javascript - 通过使用严重的 Lat/lon Array - Mapbox js 为图标设置动画

javascript - 来自 AJAX 请求时,toggleClass 不起作用

javascript - 在JSON.Net序列化json中配置$id

javascript - 使用输入过滤字段并在angularJS中下拉

javascript - Firebase 安全规则 : restrict write only to this uid,,几个字段除外

javascript - Lync UCWA - 创建应用程序给出 HTTP 409 : Conflict error

javascript - 如何使用 YouTube api v3 禁止在播放列表中插入相同视频

javascript - 获取相对于父元素的点击范围

javascript - 正则表达式用另一个字符替换每个字符,除了方括号中的内容