请问怎么在es6中优雅的退出循环并return

常常会遇到这样一个情况:

var flag=false;
var arr=["jpg","ppt","doc"];
var newArr=arr.length>0 && arr.reduce(function(x,y){
    if(x===""){
        flag==true
        return
    }
    return x+"|"+y;
})
if(flag)return;

//假装下面有代码
//假装下面有代码
//假装下面有代码

在一个循环中想要终止程序的运行,需要多一个flag变量来处理,这样很丑陋并且还多出一个变量,很恶心,请问有没有比较优雅的方式???

==================================Updata========================================
实在是不好意思,我之前的提问不太明确,已经修改了问题,需求是这样的,我想对这个newArr进行正则表达式的校验,来排除一些文件格式。

阅读 15.7k
6 个回答

你要的效果用 .some() 就可以解决,如果想数据所有项全部都通过断言,可以用 .every()

const arr = [1, 2, 3, 4, 5, 6, 7];

if (arr.some(n => n === 5)) {
    return;
}

// 假装下面有代码

来看个直观点的

if (arr.some(n => {
    console.log(n);
    return n === 5;
})) {
    console.log("哎呀不得了,中断了");
    return;
}

console.log("后面的代码");

输出

1
2
3
4
5
哎呀不得了,中断了
var a = [1,2,3,4,5,6];
a.map(v => {
    if(v > 2) throw new Error;
    console.log(v)
})

按你这样用map可以强行抛出一个错误来退出。
不过最好的方式应该是for循环中break;或者数组的some方法return

if(['2','3',''].some(function(item, index, array){
    return item === '';
})){
//如果数组中包含''就执行这里
console.log(1);
}else{
//否则执行这里
console.log(2);
}

Array.prototype.some

看不太明白楼主的意思但是随便说一点吧
map在这里是不合适的,map是有返回的的
如果你的目地是如何某个数组中含有,特殊的字符或值,你就中断这个函数,你可以先用indexof,includes来处理
比如说,如果某个数组中含有空字符串,我就不处理整个数组

if(arr.includes('') )return 

然后进入循环

或者直接用for循环 如果

function func(){
for(int i=0;i<=arr.length;i++){
    if(arr[i]==='') return //如果在函数中,执行到这里,跳出循环并直接返回了,下面代码都不会执行
    .......
}
.......
}

我也发现这个问题了 = =因为return 是返回一个函数。几乎在拉姆达表达式中return 就废了- -

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题