1.  forEach()

forEach() 方法从头至尾遍历数组,为每个元素调用指定的函数。如上所述,传递的函数作为forEach()的第一个参数。然后forEach()使用三个参数调用该 函数:数组元素、元素的索引和数组本身。如果只关心数组元素的值,可以编写只有一个参数的函数——额外的参数将忽略:

var data = [1,2,3,4,5];

//要求和的数组

// 计算数组元素的和值

var sum = 0;

// 初始为0

data.forEach(function(value){ sum += value; });

// 将每个值累加到sum上

sum

// => 15

// 每个数组元素的值自加1

data.forEach(function(v,i, a){ a[i] = v + 1; });

data

// => [2,3,4,5,6]

注意,forEach()无法在所有元素都传递给调用的函数之前终止遍历。也就是说,没有像for循环中使用的相应的break语句。如果要提前终止,必须把forEach()方法放在一个try块中,并能抛出一个异常。如果forEach()调用的函数抛出foreach.break异常,循环会提前终止:

function foreach(a,f,t){

try { a.forEach(f,t); }

catch(e){

if(e === foreach.break)return;

else throw e;

}

}

foreach.break = new Error("StopIteration");

转自: 《JavaScript权威指南(6版)》7.9.1 forEach()


2.现在让我们来实践一下吧!!!是不是很兴奋?!是不是很激动?!!是不是迫不及待!!!

Let's Go !!!

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript"> function skipOutForeach(){ //1.测试 return,return false是否能跳出循环
var arr = [];
arr = getArr(1,30);
console.log(arr);
arr.forEach(function(el,index){
if (el==20) {
console.log("遇到20,能退出吗?");//并不能
return;//return false;
}else{
console.log(el);
}
}); //2.使用异常的方式来跳出forEach循环---------------------------
console.log("-------------------------------")
var myerror = null;
try{
arr.forEach(function(el,index){
if (el==20) {
console.log("try中遇到20,能退出吗?");//
foreach.break=new Error("StopIteration");
}else{
console.log(el);
}
});
}catch(e){
console.log(e.message);
if(e.message==="foreach is not defined") {
console.log("跳出来了?");//
return;
}else throw e;
}//可以跳出来,那么 我们可以重写foreach方法
//-----------------------------
console.log("aaa"); } // skipOutForeach(); //自定义foreach方法(往Array或String的prototype添加也可以)
function fore7(arr,func){
console.log(arr);
for (var i = 0; i < arr.length; i++) {
var ret= func.call(this,arr[i],i);//回调函数
if(typeof ret !== "undefined"&&(ret==null||ret==false)) break;
} } //自定义foreach,的用法
fore7(getArr(1,30),function(a,i){
console.log(i+':'+a);
if (i==20) return false;//跳出循环
}) //返回min,max之间的数组成的数组,无序
function getArr(min,max){
if(typeof min!=='number'||typeof max !== 'number') return [];
var arr = [];
for (var i = min; i <= max; i++) {
if (arr.length<1) {
arr.push(i);
}else{
var len = arr.length;
var rIndex = Math.round(Math.random()*(len-1));
var temp = arr[rIndex];
arr[rIndex] = i;
arr.push(temp);
}
}
return arr;
}
</script>
</body>
</html>

  3.for循环

    return,break都可以跳出

  但是多重循环呢?

  aaa://需要将循环命名
for(var i=0;i<10;i++){
for(var j=0;j<5;j++){
if(i==3 && j==4){
break aaa;//跳出循环aaa
}
}
}
alert(i);输出3

  4.附录:

StackOverFlow: http://stackoverflow.com/questions/6260756/how-to-stop-javascript-foreach

js中forEach无法跳出循环?的更多相关文章

  1. JS中forEach和map的区别

    共同点: 1.都是循环遍历数组中的每一项. 2.forEach()和map()里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input. 3.匿名函数中 ...

  2. js中 forEach 和 map 区别

    共同点: 1.都是循环遍历数组中的每一项. 2.forEach()和map()里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input. 3.匿名函数中 ...

  3. js中forEach,for in,for of循环的用法详解

    一.一般的遍历数组的方法: var array = [1,2,3,4,5,6,7]; for (var i = 0; i < array.length; i) { console.log(i,a ...

  4. js中forEach,for in,for of循环的用法

    from:https://www.cnblogs.com/amujoe/p/8875053.html 一.一般的遍历数组的方法: var array = [1,2,3,4,5,6,7]; for (v ...

  5. 十 js中forEach,for in,for of循环的用法

    一.一般的遍历数组的方法: var array = [1,2,3,4,5,6,7]; for (var i = 0; i < array.length; i++) { console.log(i ...

  6. js中forEach,for in,for of的区别

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. JS中forEach的用法

    forEach是ES5中操作数组的一种方法,主要功能是遍历数组,例如: 1 2 var arr = [1,2,3,4]; arr.forEach(alert); 等价于: 1 2 3 4 var ar ...

  8. js 中 forEach 和 map

    共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input. 3.匿名 ...

  9. 关于js中for in和foreach in的区别

    js 中for in 和foreach in的区别 两个的作用都用来遍历对象,但为什么有了for in语句了还要foreach in语句呢,后来看了下foreach in开发的文档,foreach i ...

随机推荐

  1. cocso2d-x改变精灵图片

    cocos2d-x 改变精灵图片的2种方法. 1. // 首先载入贴图集 CCSpriteBatchNode *spriteBatch=CCSpriteBatchNode::batchNodeWith ...

  2. Sqoop导入MySQL数据

    导入所有表: sqoop import-all-tables –connect jdbc:mysql://ip:port/dbName --username userName --password p ...

  3. jdk线程的同步问题

    一.银行取款引出的问题 模拟银行取钱的例子: public class ThreadDemo06 { public static void main(String[] args) { Bank ban ...

  4. bored

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  5. 游戏服务器生成全局唯一ID的几种方法

    在服务器系统开发时,为了适应数据大并发的请求,我们往往需要对数据进行异步存储,特别是在做分布式系统时,这个时候就不能等待插入数据库返回了取自动id了,而是需要在插入数据库之前生成一个全局的唯一id,使 ...

  6. 关于java.lang.String理解中的一些难点

    最近温习java的一些基础知识,发现以往对String对象认识上的一些不足.特汇总如下,主要是帮助记忆,如能对其他朋友有些启发,不胜欣喜. String在JVM中内存驻留问题 JVM的常量区(Cons ...

  7. Android开发-API指南-<uses-configuration>

    <uses-configuration> 英文原文:http://developer.android.com/guide/topics/manifest/uses-configuratio ...

  8. 【测试】trunc和round的区别

    trunc是截断:round是四舍五入:下面通过一个例子具体看一下trunc和round的不同 SQL),trunc() from dual; TRUNC() TRUNC() ------------ ...

  9. 多线程查询FTP Server上的文件

    情形是这样的,最近做一个自动化的项目,当batch跑成功了,FTP Server上会有特定的生成文件.但是不确定是什么时候会有,大概是batch跑完了5分钟之内吧,所以在脚本里设置检查点的时候,需要每 ...

  10. PNG图片数据解析

    PNG是一种非常流行的图片格式,它不仅支持透明效果,而且图片数据经过了压缩处理,所以广泛用于web等应用. PNG的文件格式: PNG文件中的数据,总是以一个固定的8个字节开头: (图片来自http: ...