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
Mary-Kate Olsenasal
2024-12-20 13:00:26733semak imbas

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

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

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

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

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

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

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

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!

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