Sebuah perusahaan mobile application ingin membuat sebuah API yang menyimpan kontak info dari user. Namun user memiliki beberapa data source untuk kontak, ada yang dari GMail, Yahoo, dan lainnya. Permasalahannya dari beberapa data source tersebut ternyata ada banyak kontak yang sama. Nah karena kontak API ini mesti memudahkan user untuk mencari kontak yang diinginkan, maka kontak-kontak dari beberapa sumber tersebut mesti di-merge.
Contoh struktur dari data sebuah kontak adalah sbb:
Contact {
id: string
fullname: string
email: {
[label: string]: string
}
phone: {
[label: string]: string
}
address: {
[label: string]: string
}
other_field: {
[key: string]: string
}
}
Dan sumber data biasanya memiliki struktur yang berbeda, namun biasanya memiliki field seperti
Nama Lengkap Alamat Telepon (bisa lebih dari satu) Email (bisa lebih dari satu) Akun sosial Website
Dari beberapa field di atas, jika nama lengkapnya sama, maka field field dari beberapa sumber tersebut musti digabungkan tanpa ada duplikasi.
misalnya data contact sbb:
{
fullname: "Ahmad Bustomi"
email: {
kantor: "[email protected]"
}
phone: {
kantor: "0211234678"
hp: "082112300676"
}
}
dan contact
{
fullname: "Ahmad Bustomi"
email: {
personal: "[email protected]"
}
phone: {
hp: "082112300676"
hp_jadul: "081314735686"
}
}
menjadi
{
id: "1234"
fullname: "Ahmad Bustomi"
email: {
personal: "[email protected]",
kantor: "[email protected]"
}
phone: {
hp: "082112300676"
kantor: "0211234678"
hp_jadul: "081314735686"
}
}
Apabila ada data lain selain Nama Lengkap, email, telepon, dan alamat, dapat ditambahkan pada other_field.
Buatlah sebuah function yang inputnya adalah sebuah array yang berisi data contact, kemudian outputnya adalah contact yang sudah di-merge.
function mergeContacts(contacts Object[]) Contact[]
Sertakan pula unit test.
Max pengerjaan 3 hari semenjak mendapat soal.