.map() vs .forEach() vs for() 如何选择?
.map() vs .forEach() vs for()
笔者说,自己基本没怎么用过for()
来遍历,主要是用.forEach()
。
但是总是会被很多朋友说,这些人认为for()
的速度要比.forEach()
快一点。(其实这根本没有根据,下面会讲)
速度当然是很重要的,但是我们也需要从其他方面考虑一下,特别是代码资源。
这里有一篇很棒的文章,很好的分析了for()
遍历。它同时也针对for()遍历和
.forEach()做了比对[测试](https://jsperf.com/for-vs-foreach/37)。
for()与
.forEach()`相比会消耗更多的内存。
这样,又回到了老问题,是用空间换速度,还是反之?
当然,都很重要。首先,这2个方面都不会成为你代码中的瓶颈问题。其次,那些小小的优化技巧也不会很好的平衡这2个问题,只会增加你的工作量而已。那我在来看下可读性、可控性、以及可维护性之间的对比呢。
让我们先来看个基本的sample
比如这个数组
var arr = [1, 2, 3];
.map()
:
arr.map(fcuntion(i) {
console.log(i);
})
43个字母
.forEach()
:
arr.forEach(function(i){
console.log(i)
})
47个字母
for()
for(var i=0,l=arr.lengrh;i<l; i++) {
console.log(i);
}
70个字母
.map()
和.forEach()
明显要简短一些,并且他们的可读性更强,同时他们也创建了各自的scope
,而for()
在执行完遍历之后会把i
和l
这两个元素挂起来,这让我们需要手动增加一些代码去清除他们所占用的内存。
所以,这时候可以告诉你的朋友:
用.forEach()
或者.map()
。
.map() vs .forEach()
那么接下来,我继续做分析,为什么更推荐用.map()
,而不是.forEach()
?
首先,.map()
要比.forEach()
执行速度更快。虽然我也说过执行速度不是我们需要考虑的主要因素,但是他们都比for()
要更好用,那肯定要选更优化的一个。
第二,.forEach()
的返回值并不是array。如果你想用函数式编程写个链式表达式来装个逼,.map()
将会是你不二的选择。
来看下面这个例子:
var arr = [1, 2, 3];
console.log(
arr.map(function(i){
return i+i;
})
//链式风格
.sort()
);// [2,4,6]
console.log(
arr.forEach(function(i){
return i+i;
})
//接不起来,断了
.sort()
);//TypeError: Cannot read property 'sort' of undefined
最后
根据上面的代码,大家应该了解到.forEach()
跟.map()
的局限。
最后,感谢大家耐心的阅读,排个序
.map() > .forEach() > for()
英文原文
https://ryanpcmcquen.org/javascript/2015/10/25/map-vs-foreach-vs-for.html
.map() vs .forEach() vs for() 如何选择?的更多相关文章
- JavaScript 中 map、foreach、reduce 间的区别
一直对map.foreach.reduce这些函数很是生疏,今天看underscorejs时好好研究了一下,一研究我就更懵了,这不是一样嘛,都是遍历,所以我就去知乎找了一下,整理出了比较好的几个说法. ...
- 【Javascript】JS遍历数组的三种方法:map、forEach、filter
前言 近一段时间,因为项目原因,会经常在前端对数组进行遍历.处理,JS自带的遍历方法有很多种,往往不加留意,就可能导致知识混乱的现象,并且其中还存在一些坑.前端时间在ediary中总结了js原生自带的 ...
- java8 list和map的forEach
list forEach示例 public class HelloWorld { public static void main(String[] args) { List<User> l ...
- JavaScript中Map和ForEach的区别
译者按: 惯用Haskell的我更爱map. 原文: JavaScript — Map vs. ForEach - What’s the difference between Map and ForE ...
- Javascript的map与forEach的区别
原理: 高级浏览器支持forEach方法语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文: forEach:用来遍历数组中的每一项:这个方法执行是没 ...
- 000 list与map的foreach使用
一:list的使用 1.程序 package com.jun.it.java8; import java.util.ArrayList; import java.util.List; public c ...
- JS中map与forEach的区别
很多同学可能对于map与forEach的区别不是太了解,今天我们介绍一下JS中的map与forEach方法, 我对map的理解是,这个方法对一个数组arr1中的每一个元素进行遍历(传递给一个数组,参数 ...
- ES5中, map 和 forEach的区别
forEach和map区别在哪里知道吗? // forEach Array.prototype.forEach(callback(item, index, thisArr), thisArg) // ...
- 《ES6基础教程》之 map、forEach、filter indexOf 用法
1,map,对数组的每个元素进行一定操作,返回一个新的数组. var oldArr = [{first_name:"Colin",last_name:"Toh" ...
随机推荐
- Qt:QJsonObject
0.说明 QJsonObject在逻辑上就是一个Map或Dict!记住这一点对理解它的方法.说明很有帮助. QJsonObject类封装了JSON Object. JSON Object是一个Key- ...
- C++ 删除一个字符串中的指定字符
Q:一个数字是以xxx,yyy,zzz的字符串形式存储的,将逗号消去并转化为整数输出 方法一:char数组,即定义时s1定义为 char s1[20]的形式: //删除输入字符串中的逗号,并构建新串 ...
- Python:Excel
xlrd与xlwt:xls文件 如果不想看前半部分的基础知识,可以直接看最后的总结部分 1.两个模块 读xlrd 写xlwt import xlrd,xlwt 2.读 2.1 文件.表格信息的获取 打 ...
- 基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中
在我的各种开发框架中,数据访问有的基于微软企业库,有的基于EFCore的实体框架,两者各有其应用场景,不过多的去比较.最近在使用SqlSugar的时候,觉得这个数据访问处理的组件确实很灵活,据说性能也 ...
- WPF优秀组件推荐之LiveCharts
概述 LiveCharts是一个比较漂亮的WPF图表控件,在数据变化时还会有动画切换的效果,并且样式也可以控制. 官方网站:Live Charts (lvcharts.net) 开源代码:GitHub ...
- nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
问题场景 服务器重启后,重启nginx时报错nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: N ...
- 08 Java的方法 方法的定义
2.方法的定义 Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法: **方法包含一个方法头和一个方法体.**下面是一个方法的所有部分: 修饰符 ...
- 【工程应用五】 opencv中linemod模板匹配算法诸多疑惑和自我解读。
研究这个前前后后也有快两三个月了,因为之前也一直在弄模板匹配方面的东西,所以偶尔还是有不少朋友咨询或者问你有没有研究过linemod这个算法啊,那个效率啥的还不错啊,有段时间一直不以为然,觉得我现在用 ...
- 想让DBA瞬间崩溃,那就让他去做SQL性能优化
摘要:很多大数据计算都是用 SQL 实现的,跑得慢时就要去优化 SQL,但常常碰到让人干瞪眼的情况. 本文分享自华为云社区<做 SQL 性能优化真是让人干瞪眼>,作者: 石臻臻的杂货铺 . ...
- JSON.parse()和JSON.stringfy()区别
JSON.parse() 用于从一个json格式字符串解析出json类型的数据,如: 注意事项:json格式字符串必须是写在一排的,且括号外面用单引号,里面的每一个字符串用双引号 JSON.strin ...