Array.prototype.map()

map( )  方法创建一个 新数组 *,其结果是该数组中的每个元素是调用一次提供的 函数后的返回值 *。[ MDN / RUNOOB ]

* map 添加在第5版的  ECMA-262  标准中,我们可以通过  polyfill  在  ES2015  之前的标准中实现。值得注意的是,对目前市场的需求来说,支持  IE9+  的 map 兼容性没有想象中那么差。

执行机制

从  img-bottom-left  可以看出,新数组的每一次元素遍历都会执行一个新的函数周期

并且  map  的执行速度经大佬统计在大数据的情况下倍数劣于  for  循环

因此当我们遍历一个很大的数组,我们很可能就必须因此放弃这一函数

然而事实上,我们可以通过 try…catch… 来使用 throw 抛出一个自定义异常

以终止  map  的遍历周期,以将它再次加入我们的应用储备

跳出代码

let arr = [1, 2, 3……]

try {
arr.map((item, index) => {
if(item === 2) {
throw 'Custom Exception.'
} else {
return 'pass'
}
})
} catch(e) {
console.log(e)
}

执行结果

当循环到  arr[2]  时,满足  ' item === 3 '  的条件,通过  throw  定义自定义异常,再通过  try…catch…  将循环抛出,避免了接下来的内存消耗和不必要的性能浪费。

扩展 - try…catch…

try…catch…  语句标记要尝试的语句块,并指定一个出现异常时抛出的响应。[ MDN / RUNOOB ]

* 需要注意的是  IE5+  就支持该方法,但  IE  至今仍然不支持省略捕获参数 。

/**
* Browser isn't IE.
**/
try {
// Something.
} catch {
// Nothing.
} /**
* Terrible IE.
**/
try {
// Something.
} catch (e) { // Must arguments: e
// console.error(e)
}

扩展 - throw

throw  语句用来抛出一个用户自定义的异常。当前函数的执行将被停止( throw  之后的语句将不会执行),并且控制将被传递到调用堆栈中的第一个  catch  块,如果调用者函数中没有  catch  块,程序将会终止。 [ MDN / RUNOOB ]

function UserException(message) {
this.message = message;
this.name = "UserException";
}
function getMonthName(mo) {
mo = mo-1; // 调整月份数字到数组索引 (1=Jan, 12=Dec)
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
"Aug", "Sep", "Oct", "Nov", "Dec"];
if (months[mo] !== undefined) {
return months[mo];
} else {
throw new UserException("InvalidMonthNo");
}
} try {
// statements to try
var myMonth = 15; // 15 超出边界并引发异常
var monthName = getMonthName(myMonth);
} catch (e) {
var monthName = "unknown";
console.log(e.message, e.name); // 传递异常对象到错误处理
}

不得不说,当  try…catch…  与  throw  产生化学反应,产出的代码是非常严谨且优雅的,它理应加入我们封装 js 必经的一步。

- END -

JS020. Array map()函数查到需要的元素时跳出遍历循环,不再执行到数组边界的更多相关文章

  1. js array map() 函数的简单使用

    语法: array.map(function(currentValue,index,arr), thisValue) currentValue:必须.当前元素的值 index:可选.当前元素的索引值 ...

  2. Python基础(reduce,filter,map函数)

    map函数: map函数特点:对可迭代对象中的每个元素进行相同的操作(例如每个元素+1等等) #————————————————map函数———————————————————— #对列表的各个元素实 ...

  3. enumerate()和map()函数用法

    一.python enumerate用法 先出一个题目: 1.有一 list= [1, 2, 3, 4, 5, 6] 请打印输出: 0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输出 ...

  4. python中range函数与列表中删除元素

    一.range函数使用 range(1,5)   代表从1到4(不包含5),结果为:1,2,3,4   ,默认步长为1 range(1,5,2)   结果为:1, 3  (同样不包含5) ,步长为2 ...

  5. 通过增删改查对比Array,Map,Set,Object的使用成本和实现方式

    1.Array 和 Map 对比 { // array and map 增 查 改 删 let map = new Map(); let arr = []; // 增 map.set('a', 1); ...

  6. JavaScript Array -->map()、filter()、reduce()、forEach()函数的使用

    题目: 1.得到 3000 到 3500 之内工资的人. 2.增加一个年龄的字段,并且计算其年龄. 3.打印出每个人的所在城市 4.计算所有人的工资的总和. 测试数据: function getDat ...

  7. JavaScript Array map() 方法

    语法: array.map(function(currentValue,index,arr), thisValue) currentValue:必须.当前元素的值index:可选.当期元素的索引值ar ...

  8. JavaScript Array 常用函数整理

    按字母顺序整理 索引 Array.prototype.concat() Array.prototype.filter() Array.prototype.indexOf() Array.prototy ...

  9. 数组的方法 Array.map();Array.every()和Array.some();数组的indexof();检测是否是数组isArray(obj);

    数组的方法 Array.map(); 栗子: var a=[1,2,,3]; var b=a.map( function(value){return value*value} ); alert(b); ...

随机推荐

  1. C运算符(算数运算符)

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 1 //实列 2 3 ...

  2. Vue响应式原理底层代码模拟实现

    整体分析Vue的基本结构如下图所示:(备注:完整代码github地址https://github.com/1512955040/MiniVue) 上图中,为我们模拟最小vue的整体结构,首先创建一个v ...

  3. Run Shell Commands in Python

    subprocess.call This is the recommended way to run shell commands in Python compared with old-fashio ...

  4. setsockopt中参数之SO_REUSEADDR的意义

    1.setsockopt中参数之SO_REUSEADDR的意义 1.一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用. SO_REUSE ...

  5. MySQL学习05(MySQL函数)

    MySQL函数 常用函数 官方文档 : https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.html 数据函数 SELECT ABS ...

  6. Linux应用程序安装方法

    一.linux应用程序基础 1.1.应用程序与系统命令的关系 1.2.典型应用程序的目录结构 1.3.常见的软件包封装类型 二.RPM包管理工具 2.1.RPM软件包管理器Red-Hat Packag ...

  7. jumpserver堡垒机(2.4)部署

    jumpserver 2.4.0 部署 jumpserver 官网: https://www.jumpserver.org/ Jumpserver介绍 JumpServer 是全球首款完全开源的堡垒机 ...

  8. 基于kail的docker下安装sqli-labs

    后面的关卡涉及到转码问题,比如空格,在Windows中会受到限制,比如24关的文件重命名问题,所以在这记录下在docker下安装sqli-labs,在linux下运行就不会受到限制. 参考链接:htt ...

  9. SIM900A—基础指令

    文章目录 1.ATE指令设置回显 2.ATQ指令设置返回 3.ATV指令设置返回格式 4.AT+CFUN设置模块功能 5.AT+IPR设置波特率 6.AT+CMEE设置上报错误格式 7.各种码(IME ...

  10. STM32—TIMx输出PWM信号驱动MG996R舵机

    文章目录 一.前言 二.MG996R舵机简介 三.TIM定时器简介 四.通用定时器TIMx 1.TIMx主要功能 2.TIMx框图 3.计数单元 4.时钟选择 5.输出比较PWM 五.TIM3输出双路 ...