removeDuplicates () mengambil dalam array objek dan mengembalikan array baru tanpa objek duplikat (berdasarkan properti id).
const allTests = [
{name: 'Test1', id: '1'},
{name: 'Test3', id: '3'},
{name: 'Test2', id: '2'},
{name: 'Test2', id: '2'},
{name: 'Test3', id: '3'}
];
function removeDuplicates(array) {
let uniq = {};
return array.filter(obj => !uniq[obj.id] && (uniq[obj.id] = true))
}
removeDuplicates(allTests);
Hasil yang diharapkan:
[
{name: 'Test1', id: '1'},
{name: 'Test3', id: '3'},
{name: 'Test2', id: '2'}
];
Pertama, kita menetapkan nilai variabel uniq ke objek kosong.
Selanjutnya, kami memfilter melalui array objek. Filter membuat array baru dengan semua elemen yang lulus tes diimplementasikan oleh fungsi yang disediakan.
return array.filter(obj => !uniq[obj.id] && (uniq[obj.id] = true));
Di atas, kami menggunakan fungsi hubungan singkat &&. Jika sisi kiri && dievaluasi ke true, maka ia mengembalikan nilai di sebelah kanan &&. Jika sisi kiri salah, ia mengembalikan apa yang ada di sisi kiri &&.
Untuk setiap objek (obj) kami memeriksa uniq untuk sebuah properti bernama nilai obj.id (Dalam hal ini, pada iterasi pertama ia akan memeriksa properti '1'.) Kami ingin kebalikan dari apa yang dikembalikan (baik benar atau salah) yang mengapa kami menggunakan! di! uniq [obj.id]. Jika uniq sudah memiliki properti id, ia mengembalikan true yang mengevaluasi false (!) Memberitahu fungsi filter TIDAK untuk menambahkan objek itu. Namun, jika tidak menemukan properti obj.id, ia mengembalikan false yang kemudian dievaluasi menjadi true (!) Dan mengembalikan semuanya ke kanan &&, atau (uniq [obj.id] = true). Ini adalah nilai kebenaran, memberi tahu metode filter untuk menambahkan objek ke array yang dikembalikan, dan juga menambahkan properti {1: true} ke uniq. Ini memastikan bahwa instance obj lain dengan id yang sama tidak akan ditambahkan lagi.