Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Mengeluarkan Nilai Pendua dengan Cekap daripada Tatasusunan JavaScript?
Mengalih keluar nilai pendua daripada tatasusunan JavaScript boleh menjadi tugas biasa, terutamanya apabila bekerja dengan data yang mungkin mengandungi entri berlebihan. Terdapat beberapa pendekatan untuk mencapai ini dengan berkesan, bergantung pada sifat data dan pertimbangan prestasi anda.
Kaedah ini memanfaatkan pembina Set terbina dalam dan penyebaran sintaks untuk mencipta tatasusunan baharu yang mengandungi hanya nilai unik daripada tatasusunan asal:
const uniq = [...new Set(array)];
Pendekatan ini menggunakan kaedah penapis() untuk mengulangi tatasusunan dan menyemak sama ada kejadian pertama setiap elemen sepadan dengan kedudukan semasanya dalam tatasusunan. Elemen dengan kedudukan yang tidak sepadan dianggap pendua:
const uniqueArray = a.filter((item, pos) => a.indexOf(item) === pos);
Hashtables menyediakan cara yang cekap untuk mengesan elemen pendua dengan menggunakan pasangan nilai kunci. Dalam pendekatan ini, setiap elemen ditambahkan pada jadual hash dan kehadiran elemen disemak serta-merta:
function uniq(a) { const seen = {}; return a.filter((item) => { return seen.hasOwnProperty(item) ? false : (seen[item] = true); }); }
Untuk menggabungkan faedah dua yang sebelumnya pendekatan, penyelesaian ini menggunakan jadual hash untuk nilai primitif dan carian linear untuk objek:
function uniq(a) { const prims = { boolean: {}, number: {}, string: {} }, objs = []; return a.filter((item) => { const type = typeof item; if (type in prims) return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); else return objs.indexOf(item) >= 0 ? false : objs.push(item); }); }
Mengisih tatasusunan sebelum mengalih keluar pendua boleh memudahkan proses:
function uniq(a) { return a.sort().filter((item, pos, ary) => !pos || item != ary[pos - 1]); }
Apabila anda perlu mengalih keluar pendua berdasarkan kriteria tertentu, seperti sifat objek, anda boleh menyediakan fungsi panggil balik kepada uniqBy() kaedah:
function uniqBy(a, key) { const seen = {}; return a.filter((item) => { const k = key(item); return seen.hasOwnProperty(k) ? false : (seen[k] = true); }); }
Jika anda ingin menyimpan hanya kejadian pertama atau terakhir objek pendua, anda boleh menggunakan struktur data Set atau Peta:
function uniqByKeepFirst(a, key) { const seen = new Set(); return a.filter((item) => { const k = key(item); return seen.has(k) ? false : seen.add(k); }); } function uniqByKeepLast(a, key) { return [...new Map(a.map((x) => [key(x), x])).values()]; }
Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Nilai Pendua dengan Cekap daripada Tatasusunan JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!