J'utilise ce JavaScript pour parcourir un tableau et trouver un élément de tableau correspondant:
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;
}
Le tableau contient ces "tailles": ["34", "36", "38"...]
.
remData.size
est la "taille" que je recherche (par exemple, "36").
Je dois renvoyer l'index i
si la taille que je recherche se trouve dans l'index. Sinon, je dois retourner -1
. Y a-t-il une meilleure manière de faire cela?
Pour arrêter une boucle for
au début de JavaScript, utilisez 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
}
}
_
Si vous vous trouvez dans un environnement ES2015 (ou ES6), pour ce cas d'utilisation spécifique , vous pouvez utiliser _Array#findIndex
_ (pour rechercher l'entrée correspondante). index) ou _Array#find
_ (pour trouver l'entrée elle-même), les deux pouvant être calés/remplis:
_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
_ arrête la première fois que le rappel renvoie une valeur de vérité, renvoyant l'index de cet appel au rappel; il renvoie _-1
_ si le rappel ne renvoie jamais une valeur de vérité. _Array#find
_ s'arrête également lorsqu'il trouve ce que vous recherchez, mais renvoie l'entrée, pas son index (ou undefined
si le rappel ne renvoie jamais une valeur de vérité).
Si vous utilisez un environnement compatible ES5 (ou un shim ES5), vous pouvez utiliser la nouvelle fonction some
sur les tableaux, qui appelle un rappel jusqu'à ce que le rappel renvoie une valeur de vérité:
_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`
}
});
_
Si vous utilisez jQuery, vous pouvez utiliser jQuery.each
pour parcourir un tableau; cela ressemblerait à ceci:
_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
}
});
_
La logique est incorrecte. Il renverrait toujours le résultat du dernier élément du tableau.
remIndex = -1;
for (i = 0; i < remSize.length; i++) {
if (remSize[i].size == remData.size) {
remIndex = i
break;
}
}
Utilisez à la place la boucle for qui fait partie de la version ES2015. Contrairement à forEach, nous pouvons utiliser return, break et continue. Voir 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);
}