我翻译的结果如下:
我已经学习了map和filter的功能,并且了解到它们相对于for和foreach有一些差异和优势。
优点:
无需编写过多的代码,理解非常清晰
相比迭代,性能更好
那么,map和filter如何提高性能呢?
欢迎任何建议。
我已经学习了map和filter的功能,并且了解到它们相对于for和foreach有一些差异和优势。
优点:
无需编写过多的代码,理解非常清晰
相比迭代,性能更好
那么,map和filter如何提高性能呢?
欢迎任何建议。
其他答案已经解释了原因。这里有一个简单的基准测试例子。使用链接运行测试。
如果链接失效,我会发布结果。
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 毫秒
给出的执行时间是我测试时的结果,可能会发生变化。
map
和forEach
的使用各有优缺点,没有绝对的选择。
这两种方法的主要区别在于,forEach
允许您更改原始数组的元素并返回undefined
,而map
不允许您更改原始数组,适用于基于原始数组制作新数组。
例如,如果您需要从用户数组中获取用户ID数组,则应使用map
,如果您需要从数组的每个项目中console.log
一些内容,则最好使用forEach
。
由于javascript
是更加功能化的语言,因此最好使用Array.prototype
中的非变异函数,例如filter
、map
、find
等。这可以使代码更具可读性和可维护性。我可以编写像那样的结构:
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
用法,我避免使用可变方法。