访问原文地址

.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. Qt:QDir

    0.说明 QDir提供了访问目录及目录下内容的类. QDir既可以用于访问文件系统,也可以用于访问Qt 资源系统(Qt's resource system.). Qt用 "/" 作 ...

  2. WIN10:删除开始菜单栏中的文件夹

    C:\ProgramData\Microsoft\Windows\Start Menu\Programs,找到想删除的文件夹删除即可 其中ProgramData为隐藏文件夹,显示方式见下

  3. Spring入门笔记简要

    总览:https://www.processon.com/view/link/605b14ab5653bb2225e6b0c5 一.Spring 1.概述 1.spring框架简介 ​ 为简化企业级开 ...

  4. 20192204李龙威 2019-2020-2 《Python程序设计》实验一报告

    20192204 2019-2020-2 <Python程序设计>实验一报告 课程:<Python程序设计> 班级: 1922 姓名: 李龙威 学号:20192204 实验教师 ...

  5. 商品模型:SPU、商品、SKU概念模型设计

    商品系统是电商SaaS.新零售SaaS最基础.最核心的系统之一.商品系统几乎需要支撑所有业务系统,商品详情.购物车.订单.履约.结算.售后.库存.供应链等,都需要依赖商品系统的能力.为了保障业务的稳定 ...

  6. 关于C#窗体应用程序的一点总结

    1.在窗体Form在Form_Load函数中写了过多的界面初始化语句导致界面卡顿时 解决方法为:将一些初始化语句写在public Form()函数中,会大大加快程序的初始化加载速度. 2.为butto ...

  7. ArcMap操作随记(4)

    1.统计各省份公路长度 [标识]→[汇总]→[视图][创建] 2.用户登录分配 [创建渔网]→[连接] 3.城市超市影响范围 [创建泰森多边形]→[标识]→[汇总] 4.三维可视化分析 [构造视线]→ ...

  8. ASP.NET Core 6 Minimal API的模拟实现

    Minimal API仅仅是在基于IHost/IHostBuilder的服务承载系统上作了小小的封装而已,它利用WebApplication和WebApplicationBuilder这两个类型提供了 ...

  9. 安装backbox和win7双系统记录

    安装backbox和win7双系统记录 描述 主机已先安装win7,通过ultralISO制作启动盘安装backbox 错误一: error paring from pcc... 这个错误是我在从U盘 ...

  10. wifi钓鱼

    无线网络的加密方式和破解方式 1.WEP加密及破解 1).WEP加密方式 有线等效保密(wired euivalent pricacy,WEP)协议的使用RC4(rivest cipher4)串流加密 ...