map、filter与for和forEach的区别,使用map和filter相比于For和forEach循环有哪些优势?

7
我翻译的结果如下:

我已经学习了map和filter的功能,并且了解到它们相对于for和foreach有一些差异和优势。

优点:

  1. 无需编写过多的代码,理解非常清晰

  2. 相比迭代,性能更好

那么,map和filter如何提高性能呢?

欢迎任何建议。


1
你在哪里读到map和filter提供更好的性能了?这篇文章说得不同:https://hackernoon.com/javascript-performance-test-for-vs-for-each-vs-map-reduce-filter-find-32c1113f19d7 - Nghia Bui
for循环使用索引,foreach使用键和值进行遍历。而MapReduce使用更复杂的节点(映射器和减少器),具有排序、搜索、索引和TF-IDF等优点。 - Julius Limson
2个回答

1

其他答案已经解释了原因。这里有一个简单的基准测试例子。使用链接运行测试。

http://jsben.ch/cz0Cg

如果链接失效,我会发布结果。

JS For循环

var foo1 = ['spray', 'limit', 'elite', 'exuberant', 'destruction','present'];
for(var i=0;i<foo1.length;i++){
    console.log(foo1[i]);
}

执行时间: 677毫秒

JS Map

var foo2 = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
foo2.map((v,i)=>console.log(v));

执行时间: 686毫秒

JS过滤器

var foo3 = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = foo3.filter(word => word.length > 6);

console.log(result);

执行时间: 259 毫秒

给出的执行时间是我测试时的结果,可能会发生变化。


感谢您的快速回复@krishnadas,您是说for比map具有更好的性能,对吗? - Sivamohan Reddy
这是一个判断的调用。不同的数据可以表现出不同的性能。 - Krishnadas PC
当我处理大量数据时,我有点困惑使用for、foreach还是map更好。如果map更好,那么在map中使用什么类型的功能来提高性能,因为我没有得到任何清晰的解释。@ Krishnadas - Sivamohan Reddy
这是一个示例数据的例子,在这种情况下,for循环比map更好。您可以尝试使用实际数据来查看差异。此外,如果您在Unix环境中,可以使用time命令来查找单个脚本的时间。https://www.computerhope.com/unix/utime.htm。我的意图是测量给定输入的性能并查看结果。对于实际数据,您需要找出哪个对您运行得更快。 - Krishnadas PC

0

mapforEach的使用各有优缺点,没有绝对的选择。

这两种方法的主要区别在于,forEach允许您更改原始数组的元素并返回undefined,而map不允许您更改原始数组,适用于基于原始数组制作新数组。

例如,如果您需要从用户数组中获取用户ID数组,则应使用map,如果您需要从数组的每个项目中console.log一些内容,则最好使用forEach

由于javascript是更加功能化的语言,因此最好使用Array.prototype中的非变异函数,例如filtermapfind等。这可以使代码更具可读性和可维护性。我可以编写像那样的结构:

arr.map(num => num * 2).filter(num => num > 5);

你可以在这里学到更多https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype

P.S. 在我的项目中,每个forEach都有20个或更多的map用法,我避免使用可变方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接