访问原文地址

.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()在执行完遍历之后会把il这两个元素挂起来,这让我们需要手动增加一些代码去清除他们所占用的内存。

所以,这时候可以告诉你的朋友:

.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() 如何选择?的更多相关文章

  1. JavaScript 中 map、foreach、reduce 间的区别

    一直对map.foreach.reduce这些函数很是生疏,今天看underscorejs时好好研究了一下,一研究我就更懵了,这不是一样嘛,都是遍历,所以我就去知乎找了一下,整理出了比较好的几个说法. ...

  2. 【Javascript】JS遍历数组的三种方法:map、forEach、filter

    前言 近一段时间,因为项目原因,会经常在前端对数组进行遍历.处理,JS自带的遍历方法有很多种,往往不加留意,就可能导致知识混乱的现象,并且其中还存在一些坑.前端时间在ediary中总结了js原生自带的 ...

  3. java8 list和map的forEach

    list forEach示例 public class HelloWorld { public static void main(String[] args) { List<User> l ...

  4. JavaScript中Map和ForEach的区别

    译者按: 惯用Haskell的我更爱map. 原文: JavaScript — Map vs. ForEach - What’s the difference between Map and ForE ...

  5. Javascript的map与forEach的区别

    原理: 高级浏览器支持forEach方法语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文: forEach:用来遍历数组中的每一项:这个方法执行是没 ...

  6. 000 list与map的foreach使用

    一:list的使用 1.程序 package com.jun.it.java8; import java.util.ArrayList; import java.util.List; public c ...

  7. JS中map与forEach的区别

    很多同学可能对于map与forEach的区别不是太了解,今天我们介绍一下JS中的map与forEach方法, 我对map的理解是,这个方法对一个数组arr1中的每一个元素进行遍历(传递给一个数组,参数 ...

  8. ES5中, map 和 forEach的区别

    forEach和map区别在哪里知道吗? // forEach Array.prototype.forEach(callback(item, index, thisArr), thisArg) // ...

  9. 《ES6基础教程》之 map、forEach、filter indexOf 用法

    1,map,对数组的每个元素进行一定操作,返回一个新的数组. var oldArr = [{first_name:"Colin",last_name:"Toh" ...

随机推荐

  1. 【ASP.NET Core】绑定到 CancellationToken 对象

    负责管理 HTTP 请求上下文的 HttpContext 对象有一个名为 RequestAborted 的属性.据其名思其义,就是可用来表示客户端请求是否已取消. 果然,它的类型是 Cancellat ...

  2. C++ 删除一个字符串中的指定字符

    Q:一个数字是以xxx,yyy,zzz的字符串形式存储的,将逗号消去并转化为整数输出 方法一:char数组,即定义时s1定义为 char s1[20]的形式: //删除输入字符串中的逗号,并构建新串 ...

  3. CSDN中Markdown编辑器使用方法

    Markdown编辑器 如果想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识. 新的改变 CSDN中Markdown编辑器进行了一些功能拓展与语法支 ...

  4. 如何使用在线工具手动验证JWT签名

    如何使用在线工具手动验证JWT签名     先丢一个转换地址:https://cryptii.com/   首先: jwt分为三个部分:header,payload,verifysignature   ...

  5. 【译】ASP.NET Core 6 中的性能改进

    原文 | Brennan Conroy 翻译 | 郑子铭 受到 Stephen Toub 关于 .NET 性能的博文的启发,我们正在写一篇类似的文章来强调 6.0 中对 ASP.NET Core 所做 ...

  6. think php 图像加水印

    1.将下载好的字体引入至 thinkPHP 框架的public/static 下(这里我建了一个文件夹叫font) (1.) (2.)   2.将字体路径写入config.php中 'font'=&g ...

  7. Semantic Text Similarity

    stop word是指像the,is ,are等等方向的词 stemming意思就是将形式化为一样的形式,比如lists,listed,list都可以化为list形式.

  8. python 生产数据表脚本

    # -*- coding: utf-8 -*-import re"""建立相关表的字段从源表创建指定的MySQL建表脚本"""# 目标表名称 ...

  9. 使用scrapy 创建爬虫项目

    使用scrapy 创建爬虫项目 步骤一: scrapy startproject tutorial 步骤二: you can start your first spider with: cd tuto ...

  10. 七天接手react项目 系列

    七天接手react项目 背景 假如七天后必须接手一个 react 项目(spug - 一个开源运维平台),而笔者只会 vue,之前没有接触过 react,此刻能做的就是立刻展开一个"7天 r ...