Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Mengeluarkan Nilai Pendua dengan Cekap daripada Tatasusunan JavaScript?

Bagaimana untuk Mengeluarkan Nilai Pendua dengan Cekap daripada Tatasusunan JavaScript?

Mary-Kate Olsen
Lepaskan: 2024-12-20 13:00:26
asal
742 orang telah melayarinya

How to Efficiently Remove Duplicate Values from a JavaScript Array?

Alih keluar nilai pendua daripada tatasusunan JS

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.

Menggunakan pembina Set dan sintaks spread

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)];
Salin selepas log masuk

"Pintar" tetapi naif cara

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);
Salin selepas log masuk

Hashtables to the rescue

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);
  });
}
Salin selepas log masuk

Yang terbaik daripada dua dunia

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);
  });
}
Salin selepas log masuk

Isih | uniq

Mengisih tatasusunan sebelum mengalih keluar pendua boleh memudahkan proses:

function uniq(a) {
  return a.sort().filter((item, pos, ary) => !pos || item != ary[pos - 1]);
}
Salin selepas log masuk

Unik oleh...

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);
  });
}
Salin selepas log masuk

Pertama atau terakhir?

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()];
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan