3 Metode JavaScript Untuk Memfilter Objek Duplikat Dalam Array - CRUDPRO

3 Metode JavaScript Untuk Memfilter Objek Duplikat Dalam Array

3 Metode JavaScript Untuk Memfilter Objek Duplikat Dalam Array

1. Menaruh object pertama kali dalam array dengan nilai property

Untuk memfiltrasi object duplikat dalam array dengan property di JavaScript, pakai sistem filter() untuk memfiltrasi komponen yang bukan yang pertama kali dalam array yang mempunyai nilai property itu.

Misalkan:

const arr = [
  {
    name: 'John',
    location: 'Los Angeles',
  },
  {
    name: 'Kate',
    location: 'New York',
  },
  {
    name: 'Mike',
    location: 'New York',
  },
];

const unique = arr.filter(
  (obj, index) =>
    arr.findIndex((item) => item.location === obj.location) === index
);
/*
   [
     { name: 'John', location: 'Los Angeles' },
     { name: 'Kate', location: 'New York' }
   ]
 */
console.log(unique);

Filter array () mengetes tiap komponen dalam array pada keadaan yang ditetapkan oleh fungsi callback dan membuat array baru yang berisi komponen yang lulus pengetesan, itu tidak mengganti array asli.

const arr = [1, 2, 3, 4];

const filtered = arr.filter((num) => num > 2);
console.log(filtered); // [ 3, 4 ]

Sistem Array findIndex() cari array untuk sebuah komponen dan kembalikan index komponen pertama kali yang bisa lolos pengetesan, ditetapkan oleh fungsi callback yang dilanjutkan ke array itu. Kami memakai ini untuk temukan komponen array pertama kali yang mempunyai nilai property yang serupa dengan object filter() yang dites.

Dalam contoh kita, keadaan object filter() ialah index arraynya sama dengan hasil findIndex(). Bila keadaan ini betul, bermakna object itu ialah komponen array pertama dengan nilai property. Bila false, bermakna telah ada poin array dengan nilai property itu, hingga object itu sebagai duplikat dan jangan diikutkan dalam hasil.

const arr = [
  {
    name: 'John',
    location: 'Los Angeles',
  },
  {
    name: 'Kate',
    location: 'New York',
  },
  {
    name: 'Mike',
    location: 'New York',
  },
];

// true - first object with location of New York
console.log(1 === arr.findIndex((obj) => obj.location === 'New York'));

// false - will not be included in result
console.log(2 === arr.findIndex((obj) => obj.location === 'New York'));

Filter duplikat object dalam array dengan beberapa property

Tergantung pada keadaan Anda, Anda kemungkinan cuma ingin memandang object sebagai duplikat bila mereka mempunyai dua ataupun lebih property dengan nilai yang serupa — beberapa property dengan nilai yang serupa.

Untuk kasus ini, kami akan memakai filter() dan findIndex() seperti awalnya, tapi kami akan menambah perbedaan extra di antara object filter() dan object findIndex() untuk semuanya property.

Misalkan:

const arr = [
  {
    name: 'Kate',
    location: 'New York'
  },
  {
    name: 'Mike',
    location: 'New York'
  },
  {
    name: 'Kate',
    location: 'New York'
  }
];

const unique = arr.filter(
  (obj, index) =>
    arr.findIndex(
      (item) => item.location === obj.location && item.name === obj.name
    ) === index
)
/*
   [
      { name: 'Kate', location: 'New York' },
      { name: 'Mike', location: 'New York' }
   ]
 */
console.log(unique);

2. Mengecualikan duplikat dari array unik

Berikut cara lain untuk memfilter objek duplikat dari array di JavaScript:

Buat array unik kosong untuk menyimpan objek unik.

Loop melalui objek dalam array.

Untuk setiap objek, jika bukan duplikat, tambahkan ke array unik. Jika tidak, abaikan saja.

Misalnya:

const arr = [
  {
    name: 'John',
    location: 'Los Angeles',
  },
  {
    name: 'Kate',
    location: 'New York',
  },
  {
    name: 'Mike',
    location: 'New York',
  },
];

const unique = [];
for (const item of arr) {
  const isDuplicate = unique.find((obj) => obj.location === item.location);
  if (!isDuplicate) {
    unique.push(item);
  }
}
/*
   [
    { name: 'John', location: 'Los Angeles' },
    { name: 'Kate', location: 'New York' }
  ]
*/
console.log(unique);

Kami memakai for…of loop untuk berpindah lewat array dan lakukan operasi pada tiap object.

Untuk tiap object, kami memakai sistem find() untuk mengecek sudahkah ada pada array unik. Array find() cari array untuk object pertama kali yang lulus pengetesan yang ditetapkan, serupa dengan findIndex(), tapi kembalikan object tersebut, bukan index arraynya.

const nums = [2, 5, 8, 13, 19];

const doubleDigit = nums.find((num) => num > 9);
console.log(doubleDigit); // 13

Bila tidak dalam array unik, kami cuma menambahnya memakai sistem push().

Sistem ini tidak satu baris seperti sistem pertama, tapi Anda kemungkinan semakin lebih gampang pahaminya. Ini kelihatannya langkah alami Anda sebagai manusia untuk hapus poin duplikat dari daftar.

3. Saring object duplikat dalam array dengan beberapa property

Seperti pendekatan awalnya, bila memakai beberapa property untuk tentukan apa satu object sebagai duplikat, Anda cukup menambah semakin banyak pengecekan untuk property — ini kali dalam sistem find() :

const

 arr = [
  {
    name: 'Kate',
    location: 'New York',
  },
  {
    name: 'Mike',
    location: 'New York',
  },
  {
    name: 'Kate',
    location: 'New York',
  },
];

const unique = [];
for (const item of arr) {
  // 👇 "name" and "location" used for duplicate check
  const duplicate = unique.find(
    (obj) => obj.location === item.location && obj.name === item.name
  );
  if (!duplicate) {
    unique.push(item);
  }
}
/*
  [
    { name: 'Kate', location: 'New York' },
    { name: 'Mike', location: 'New York' }
  ]
 */
console.log(unique);

Rangkuman

Di atas ialah semua konten yang saya bagi ke Anda ini hari, mudah-mudahan konten ini bisa menolong Anda.