Untuk menghentikan for
loop di awal JavaScript, Anda menggunakan 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
}
}
Jika Anda berada di lingkungan ES2015 (alias ES6), untuk kasus penggunaan khusus ini, Anda dapat menggunakan Array#findIndex
(untuk menemukan indeks entri) atau Array#find
(untuk menemukan entri itu sendiri), keduanya dapat di-shim / 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
berhenti pertama kali callback mengembalikan nilai yang sebenarnya, mengembalikan indeks untuk panggilan itu ke callback; itu kembali -1
jika callback tidak pernah mengembalikan nilai yang sebenarnya. Array#find
juga berhenti ketika menemukan apa yang Anda cari, tetapi mengembalikan entri, bukan indeksnya (atau undefined
jika callback tidak pernah mengembalikan nilai yang sebenarnya).
Jika Anda menggunakan lingkungan yang kompatibel dengan ES5 (atau shim ES5), Anda dapat menggunakan some
fungsi baru pada array, yang memanggil callback hingga callback mengembalikan nilai yang sebenarnya:
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`
}
});
Jika Anda menggunakan jQuery, Anda dapat menggunakan jQuery.each
untuk melakukan loop melalui array; itu akan terlihat seperti ini:
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
}
});
break
dalam satufor
lingkaran,return false
dalamjQuery.each
,return true
dalamsome
, ...).Gunakan for of loop sebagai gantinya yang merupakan bagian dari rilis ES2015. Tidak seperti forEach, kita dapat menggunakan return, break, dan lanjutkan. Lihat https://hacks.mozilla.org/2015/04/es6-in-depth-iterators-and-the-for-of-loop/
sumber
Logikanya salah. Itu akan selalu mengembalikan hasil elemen terakhir dalam array.
sumber
Saya tahu ini agak lama, tetapi alih-alih melakukan perulangan melalui array dengan for loop, akan jauh lebih mudah untuk menggunakan metode ini
<array>.indexOf(<element>[, fromIndex])
Ini mengulang melalui array, menemukan dan mengembalikan indeks pertama dari sebuah nilai. Jika nilainya tidak ada dalam larik, ia mengembalikan -1.
<array>
adalah larik untuk dilihat,<element>
adalah nilai yang Anda cari, dan[fromIndex]
merupakan indeks untuk memulai (defaultnya 0).Saya harap ini membantu mengurangi ukuran kode Anda!
sumber
How to stop a JavaScript for loop?
Ini tidak jawabannya Apakah ada cara yang lebih baik untuk kembali indeks pertandingan / -1 jika tidak ada .