为什么Javascript forEach不允许使用break或return提前终止

时间:2016-09-14 05:39:13

标签: javascript foreach

我知道这种行为是众所周知的并且有很好的记录: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

  

除了by之外,没有办法停止或中断forEach()循环   抛出一个例外。如果需要这样的行为,请使用forEach()方法   是错误的工具,而是使用普通循环。如果你正在测试   你需要一个谓词的数组元素并需要一个布尔返回值   可以使用every()或some()代替。如果可用,新方法   find()或findIndex()可以在true时用于提前终止   也是谓词。



var theSecond = findTheSecond()
console.log('theSecond is: ' + theSecond)

function findTheSecond(){
  [1,2,3].forEach(function(e1) {
	console.log('Item:' + e1)
  if(e1 === 2) {
   return(e1)
  }
});
}




我的问题是为什么JavaScript设计得像这样?这是对语言的疏忽或故意设计决定吗?

2 个答案:

答案 0 :(得分:2)

这些函数迭代器方法不会像普通的“for”循环一样“破坏”,可能是因为当你想要“forEach”时,他们可能会认为你故意想要为数组中的每个“值”做一些事情。要在“找到”正确的项目中执行您想要执行的操作,可以使用“查找”

var theSecond = findTheSecond();
console.log('theSecond is: ' + theSecond)

function findTheSecond(){
  return (
    [1,2,3].find(function(e1) {
      console.log('Item: ', e1);
      return e1 === 2
    })
  )
}

忘记必要的“for循环”,获得“功能”!阵列上有很多方法可供选择,即map,reduce等。

答案 1 :(得分:0)

如果需要,您可以使用Array#some快捷方式。



var theSecond = findTheSecond();
console.log('theSecond is: ' + theSecond);

function findTheSecond() {
    var result;
    [1, 2, 3].some(function (el, i) {
        console.log('Item:' + el);
        if (i === 1) {
            result = el; 
            return true;
        }
    });
    return result;
}