CNode

nodejs的forEach不支持break吗?

Yyakczh发布于13 年前最后回复10 年前32 回复47635 浏览0 收藏
查看回复

回复 (32)

Y
yaochun#1·12 年前

其实压根就不是Node的问题,而是es5里面就不支持array的forEach的break 直接改every就可以了

A
alsotang#2·12 年前

jquery 的 each 就好多了

A
alsotang#3·11 年前

lodash 的也支持 return false: https://lodash.com/docs#forEach

J
JacksonTian#4·11 年前

你见过在函数里写break的么。break只影响for循环。forEach是函数。

H
hacke2#5·11 年前

return false

D
dd1994#6·11 年前

这就是 foreach map reduce 这些高阶函数的局限啊,没有循环里的 break continue 等操作,遇到这样的情况还是用循环吧。至于用 some every 之类的就是 hack 了,可读性不好。

S
superobin#7·11 年前

every/some 正解,不咋好看,烧别人脑子

D
dd1994#8·11 年前
引用 magicdawn你可以设置一个变量叫 breaked , 然后 在你想break的地方设breaked = true

@magicdawn 你这样没用的,举个例子:

[1, 2, 3, 4].forEach(function(e){
    console.log(e);
    if(e === 3) return;
})

照样输出 1 2 3 4

D
dd1994#9·11 年前
引用 magicdawn你可以设置一个变量叫 breaked , 然后 在你想break的地方设breaked = true

@magicdawn 就是因为 return 只是从最里面的那个匿名函数 return,不能从 forEach return

M
magicdawn#10·11 年前

What I mean

var breaked = false;
[1, 2, 3, 4].forEach(function(e){
	if(breaked) return;
    console.log(e);
    if(e === 3) breaked = true;
})
O
okoala#11·11 年前

这点来说forEach确实是弱了,要是逻辑复杂的循环,要不直接for循环,要不就是联合使用map,reduce,filter等数组方法。

D
dd1994#12·11 年前
引用 magicdawnWhat I mean

@magicdawn 你这个也太 hack 了... 但是也没有真的 break 出来,还是在遍历,只是 return 后面的代码没有执行罢了...

D
davidzhang#13·11 年前

看了半天没看懂,到底是解决了还是没解决啊,费劲的嘞, 我给个例子号了。唉,你们啊, 简单实现一个forEach不能实现的break策略 不管怎说也要有个实例啊。

H
hainee#14·11 年前

艹,return false!!!

B
brighthas#15·13 年前
return false;
B
brighthas#16·13 年前

list.forEach(function(o){ ...

return false; // stop for

})

I
island205#17·13 年前

break是用在for语句中的,forEach函数和for语句差距很大。

M
marshal#18·13 年前

这个我前段时间 也遇到过 发现break后面的还是会执行 就老老实实用for遍历了

M
magicdawn#19·11 年前

你可以设置一个变量叫 breaked , 然后

forEach(function(){
    if(breaked) return
})

在你想break的地方设breaked = true

J
jackieli123723#20·10 年前

var newArr = [1, 2, 3, 4].filter(function(item){ return item >3; });

console.log("Filter results:",newArr);

G
ghostcode#21·10 年前

不能 From Noder

Y
yakczh#22·13 年前
 
 var citys={bj:100,sh:200,gz:3000};
citys.forEach(function(key){
     
     
     console.log(key);
     if(key=='sh'){
         
         break;
     }
     
 });

`SyntaxError: Illegal break statement

B
babyphenix#23·13 年前

用下边的代替吧

for(var key in citys) {
   if (key == 'sh') {
       break;  	
    }
}
S
saber#24·13 年前

有回调函数,明显就不行了

Z
zxc122333#25·13 年前

forEach的callback是个函数,应该用return

F
finian#26·13 年前

用数组的some或every

J
jsw0528#27·13 年前

你的目的是什么?

试试 Underscore 的 find、some ?

Y
yakczh#28·13 年前

检查每一个配置项,如果发现有一个不符合规则,就退出检查流程

F
finian#29·13 年前
引用 brighthaslist.forEach(function(o){ ... return false; // stop for })

这样是stop不了的,后面的item还是照样会被iterate

@yakczh 用数组的some或every函数就行了

H
hqingx#30·13 年前

这是个陷阱 要相关这个编程思维了

J
jiyinyiyong#31·13 年前

面向过程和函数式的区别么...

C
coolswitch#32·10 年前

return true 跳过本次循环,return false 跳出循环 From Noder

参与回复
登录后即可参与回复。登录