Maison > interface Web > js tutoriel > Comment supprimer en toute sécurité des éléments d'un tableau lors d'une itération en JavaScript ?

Comment supprimer en toute sécurité des éléments d'un tableau lors d'une itération en JavaScript ?

Susan Sarandon
Libérer: 2024-12-23 19:02:11
original
419 Les gens l'ont consulté

How to Safely Remove Items from an Array While Iterating in JavaScript?

Itérer dans des tableaux et supprimer des éléments sans rompre la boucle

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);
    }           
}
Copier après la connexion

Solution :

Pour résoudre ce problème, envisagez deux approches :

  1. 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--;
        }           
    }
    Copier après la connexion
  2. 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);
        } 
    }
    Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal