Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Mengalih keluar Item dengan Selamat daripada Array Semasa Memulas dalam JavaScript?

Bagaimana untuk Mengalih keluar Item dengan Selamat daripada Array Semasa Memulas dalam JavaScript?

Susan Sarandon
Susan Sarandonasal
2024-12-23 19:02:11497semak imbas

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

Lelaran Melalui Tatasusunan dan Mengalih Keluar Item Tanpa Memutuskan Gelung

Apabila mengalih keluar item daripada tatasusunan dalam gelung, anda mungkin menghadapi isu di mana splice() menghasilkan elemen berikutnya tidak boleh diakses. Ini kerana splice() mengindeks semula tatasusunan, berpotensi melangkau item.

Masalah:

Dalam contoh berikut, mengurangkan "saat" dan kemudian menyambung item berdasarkan nilai negatifnya menyebabkan undefined ralat:

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);
    }           
}

Penyelesaian:

Untuk menyelesaikan isu ini, pertimbangkan dua pendekatan:

  1. Penurunan Indeks Selepas Splice(): Selepas mengalih keluar item dengan splice(), kurangkan "i" untuk melaraskan pengindeksan semula:

    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--;
        }           
    }
  2. Lelaran Secara Songsang: Mulakan gelung dengan indeks terakhir dan lelaran secara terbalik:

    var i = Auction.auctions.length
    while (i--) {
        ...
        if (...) { 
            Auction.auctions.splice(i, 1);
        } 
    }

Dengan cara ini, pengindeksan semula hanya mempengaruhi elemen berikutnya, membolehkan gelung.

Atas ialah kandungan terperinci Bagaimana untuk Mengalih keluar Item dengan Selamat daripada Array Semasa Memulas dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn