Rumah >hujung hadapan web >tutorial js >Bagaimana Menyahduplikasi Tatasusunan Objek Berdasarkan Sifat Tertentu dengan Cekap?

Bagaimana Menyahduplikasi Tatasusunan Objek Berdasarkan Sifat Tertentu dengan Cekap?

Barbara Streisand
Barbara Streisandasal
2025-01-01 04:16:111052semak imbas

How to Efficiently Deduplicate Arrays of Objects Based on Specific Properties?

Penyahduplikasian Tatasusunan Objek yang Cekap

Mengalih keluar objek pendua daripada tatasusunan boleh menjadi penting untuk integriti data dan pengoptimuman prestasi. Artikel ini meneroka kaedah berkesan untuk menghapuskan pendua daripada tatasusunan yang mengandungi objek.

Masalah:

Pertimbangkan objek dengan tatasusunan objek bersarang. Matlamatnya adalah untuk mengalih keluar objek pendua berdasarkan sifat "tempat" dan "nama" mereka.

obj = {};

obj.arr = new Array();

obj.arr.push({place: "here", name: "stuff"});
obj.arr.push({place: "there", name: "morestuff"});
obj.arr.push({place: "there", name: "morestuff"});

Penyelesaian:

Kaedah 1: Penapisan ES6 dengan Array.filter dan Array.findIndex

obj.arr = obj.arr.filter((value, index, self) =>
  index === self.findIndex((t) =>
    t.place === value.place && t.name === value.name
  )
);

Kaedah ini memanfaatkan Array.filter dan Array.findIndex untuk lelaran melalui tatasusunan dan mengenal pasti pendua. Ia hanya mengembalikan objek unik, mengekalkan kedua-dua sifat.

Kaedah 2: Penyelesaian Generik dengan JSON.stringify

const uniqueArray = obj.arr.filter((value, index) => {
  const _value = JSON.stringify(value);
  return index === obj.arr.findIndex((obj) => {
    return JSON.stringify(obj) === _value;
  });
});

Pendekatan ini membandingkan perwakilan JSON objek dengan mengesan pendua. Ia merupakan penyelesaian generik yang boleh memuatkan objek dengan mana-mana struktur harta benda.

Kaedah 3: Menggunakan Perbandingan Kesaksamaan Harta Tersuai

const isPropValuesEqual = (subject, target, propNames) =>
  propNames.every((propName) => subject[propName] === target[propName]);

const getUniqueItemsByProperties = (items, propNames) =>
  items.filter((item, index, array) =>
    index === array.findIndex((foundItem) => isPropValuesEqual(foundItem, item, propNames))
  );

Kaedah ini membolehkan perbandingan hartanah yang lebih disesuaikan . Ia menggunakan fungsi panggil balik untuk menentukan kesaksamaan harta dan mengembalikan set unik objek berdasarkan sifat yang ditentukan.

Penjelasan:

Kunci kepada penduaan ialah mencari pendua dan mengecualikan mereka daripada hasilnya. Fungsi findIndex membantu mengenal pasti tika pertama objek dengan sifat tertentu, manakala penapis mengalih keluar pendua yang berlaku selepas itu.

Atas ialah kandungan terperinci Bagaimana Menyahduplikasi Tatasusunan Objek Berdasarkan Sifat Tertentu dengan Cekap?. 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
Artikel sebelumnya:Mari bercakap metaframeworksArtikel seterusnya:Mari bercakap metaframeworks