如何停止一个JavaScript for循环?

2022-08-30 02:21:26

我正在使用这个JavaScript来循环访问数组并找到匹配的数组元素:

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”)。

如果我搜索的大小在索引中,我需要返回索引。否则我需要返回。有没有更好的方法来做到这一点?i-1


答案 1

要在 JavaScript 的早期停止循环,请使用 breakfor

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)环境中,对于此特定用例,您可以使用 's(查找条目的索引)或 (查找条目本身),这两者都可以填充/多填:ArrayfindIndexfind

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;
});

find在回调首次返回真值时停止,返回回调返回其真值的元素(如果回调从不返回真值,则返回):undefined

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;
});

findIndex在回调首次返回真值时停止,返回元素的索引而不是元素;如果回调从不返回真值,则返回。-1

如果您使用的是与 ES5 兼容的环境(或 ES5 填充码),则可以在数组上使用新的 some 函数,该函数调用回调,直到回调返回真实值:

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
    }
});

答案 2

使用 for 的循环代替,这是 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;
  console.log(ele);
}