fre*_*ent 113 javascript for-loop
我正在使用这个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;
}
Run Code Online (Sandbox Code Playgroud)
该数组包含这些"大小":["34", "36", "38"...].
remData.size 是我正在寻找的"大小"(例如"36").
i如果我正在搜索的大小在索引中,我需要返回索引.否则我需要回来-1.有一个更好的方法吗?
T.J*_*der 165
要for在JavaScript中尽早停止循环,请使用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
}
}
Run Code Online (Sandbox Code Playgroud)
如果您在ES2015(也称为ES6)环境中,对于此特定用例,您可以使用Array#findIndex(查找条目的索引)或Array#find(查找条目本身),这两者都可以是shimmed/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;
});
Run Code Online (Sandbox Code Playgroud)
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;
});
Run Code Online (Sandbox Code Playgroud)
Array#findIndex在第一次回调返回truthy值时停止,将该调用的索引返回给回调; -1如果回调永远不会返回真值,它会返回.Array#find当它找到你要找的东西时也会停止,但是它返回的是条目,而不是它的索引(或者undefined如果回调永远不会返回真值).
如果您正在使用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`
}
});
Run Code Online (Sandbox Code Playgroud)
如果你正在使用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
}
});
Run Code Online (Sandbox Code Playgroud)
ami*_*t_g 10
逻辑是不正确的.它总是返回数组中最后一个元素的结果.
remIndex = -1;
for (i = 0; i < remSize.length; i++) {
if (remSize[i].size == remData.size) {
remIndex = i
break;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 10
用于循环而不是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);
}
Run Code Online (Sandbox Code Playgroud)