Lors de la suppression d'éléments d'un tableau dans une boucle, vous pouvez rencontrer un problème où splice() restitue les éléments suivants inaccessible. En effet, splice() réindexe le tableau, sautant potentiellement des éléments.
Problème :
Dans l'exemple suivant, décrémenter les « secondes », puis épisser l'élément en fonction de sa valeur négative provoque un effet indéfini erreur :
for (i = 0, len = Auction.auctions.length; i < len; i++) { auction = Auction.auctions[i]; Auction.auctions[i]['seconds'] --; if (auction.seconds < 0) { Auction.auctions.splice(i, 1); } }
Solution :
Pour résoudre ce problème, envisagez deux approches :
Décrémenter Index After Splice() : après avoir supprimé un élément avec splice(), décrémentez "i" pour ajuster le réindexation :
for (i = 0, len = Auction.auctions.length; i < len; i++) { auction = Auction.auctions[i]; Auction.auctions[i]['seconds'] --; if (auction.seconds < 0) { Auction.auctions.splice(i, 1); i--; } }
Itérer en sens inverse : Démarrer la boucle avec le dernier index et itérer en sens inverse :
var i = Auction.auctions.length while (i--) { ... if (...) { Auction.auctions.splice(i, 1); } }
De cette façon, la réindexation n'affecte que les éléments suivants, permettant une boucle continue.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!