如何停止JavaScript for循环?

我正在使用这个JavaScript遍历一个数组,并find一个匹配的数组元素:

var remSize = [], szString, remData, remIndex, i; for (i = 0; i < remSize.length; i++) { // I'm looking for the index i, when the condition is true remSize[i].size == remData.size ? remIndex = i : remIndex = -1; } 

该数组包含这些“大小”: ["34", "36", "38"...]

remData.size是我正在查找的“大小”(例如“36”)。

如果我正在search的大小在索引中,我需要返回索引。 否则,我需要返回-1 。 有一个更好的方法吗?

要在JavaScript中尽早停止for循环,可以使用break

 var remSize = [], szString, remData, remIndex, i; /* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */ remIndex = -1; // Set a default if we don't find it for (i = 0; i < remSize.length; i++) { // I'm looking for the index i, when the condition is true if (remSize[i].size === remData.size) { remIndex = i; break; // <=== breaks out of the loop early } } 

如果您在ES2015(也称为ES6)环境中,则对于此特定用例,可以使用Array#findIndex (查找条目的索引)或Array#find (查找条目本身),两者都可以被删除/ polyfilled:

 var remSize = [], szString, remData, remIndex; /* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */ remIndex = remSize.findIndex(function(entry) { return entry.size === remData.size; }); 

Array#find

 var remSize = [], szString, remData, remEntry; /* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */ remEntry = remSize.find(function(entry) { return entry.size === remData.size; }); 

Array#findIndex在callbackArray#findIndex第一次返回真值时停止,并返回该callback的索引; 如果callback从不返回真值,则返回-1Array#find当它find你正在查找的内容时也会停止,但是它返回的是entry,而不是它的索引(如果callback从不返回真值,则返回undefined)。

如果您使用的是与ES5兼容的环境(或ES5垫片),则可以在数组上使用新的some函数 ,这些函数会调用callback函数 ,直到callback函数返回一个真值:

 var remSize = [],  szString,  remData,  remIndex; /* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */ remIndex = -1; // <== Set a default if we don't find it remSize.some(function(entry, index) {  if (entry.size === remData.size) {    remIndex = index;    return true; // <== Equivalent of break for `Array#some`  } }); 

如果你使用jQuery,你可以使用jQuery.each循环一个数组; 看起来像这样:

 var remSize = [], szString, remData, remIndex; /* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */ remIndex = -1; // <== Set a default if we don't find it jQuery.each(remSize, function(index, entry) { if (entry.size === remData.size) { remIndex = index; return false; // <== Equivalent of break for jQuery.each } }); 

逻辑不正确。 它总是会返回数组中最后一个元素的结果。

 remIndex = -1; for (i = 0; i < remSize.length; i++) { if (remSize[i].size == remData.size) { remIndex = i break; } } 

用于循环,而不是ES2015版本的一部分。 不像forEach,我们可以使用return,break和continue。 请参阅https://hacks.mozilla.org/2015/04/es6-in-depth-iterators-and-the-for-of-loop/

 let arr = [1,2,3,4,5]; for(let ele of arr){ if(ele>3){break;} else{console.log(ele);} }