Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Mengeluarkan Objek dengan Cekap dari Array Berdasarkan Sifat dalam JavaScript?

Bagaimana untuk Mengeluarkan Objek dengan Cekap dari Array Berdasarkan Sifat dalam JavaScript?

Barbara Streisand
Barbara Streisandasal
2024-10-30 08:59:39456semak imbas

How to Efficiently Remove Objects from an Array Based on Properties in JavaScript?

Menggunakan JavaScript Asli untuk Mengalih Keluar Objek daripada Tatasusunan oleh Harta Objek

Apabila bekerja dengan tatasusunan objek, mengalih keluar objek tertentu berdasarkan sifat boleh penting. Walau bagaimanapun, hanya menggunakan splice() boleh membawa kepada komplikasi kerana panjang tatasusunan yang semakin berkurangan. Begini cara untuk mengatasi isu ini menggunakan teknik JavaScript asli:

Mengurangkan i Selepas Pemadaman:

Untuk membetulkan isu dengan splice, kurangkan i selepas setiap pemadaman untuk mengambil kira indeks beralih. Ini menghalang pelangkauan elemen tatasusunan dan memastikan semua objek sasaran dialih keluar.

for (var i = 0; i < arrayOfObjects.length; i++) {
    var obj = arrayOfObjects[i];

    if (listToDelete.indexOf(obj.id) !== -1) {
        arrayOfObjects.splice(i, 1);
        i--;
    }
}

Menulis Semula Elemen Tatasusunan:

Untuk mengelakkan pemadaman masa linear, anda boleh tulis semula hanya elemen yang anda mahu simpan di atas tatasusunan.

var end = 0;

for (var i = 0; i < arrayOfObjects.length; i++) {
    var obj = arrayOfObjects[i];

    if (listToDelete.indexOf(obj.id) === -1) {
        arrayOfObjects[end++] = obj;
    }
}

arrayOfObjects.length = end;

Menggunakan Set Cincang:

Untuk carian yang lebih pantas, gunakan set cincang untuk menyimpan ID daripada objek yang akan dipadamkan.

const setToDelete = new Set(listToDelete);
let end = 0;

for (let i = 0; i < arrayOfObjects.length; i++) {
    const obj = arrayOfObjects[i];

    if (setToDelete.has(obj.id)) {
        arrayOfObjects[end++] = obj;
    }
}

arrayOfObjects.length = end;

Fungsi Boleh Guna Semula:

Balut logik ini menjadi fungsi boleh guna semula untuk kemudahan.

const filterInPlace = (array, predicate) => {
    let end = 0;

    for (let i = 0; i < array.length; i++) {
        const obj = array[i];

        if (predicate(obj)) {
            array[end++] = obj;
        }
    }

    array.length = end;
};

const toDelete = new Set(['abc', 'efg']);

const arrayOfObjects = [{id: 'abc', name: 'oh'},
                        {id: 'efg', name: 'em'},
                        {id: 'hij', name: 'ge'}];

filterInPlace(arrayOfObjects, obj => !toDelete.has(obj.id));

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Objek dengan Cekap dari Array Berdasarkan Sifat 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