Skip to content

Instantly share code, notes, and snippets.

@mamaz
Last active November 20, 2019 09:09
Show Gist options
  • Save mamaz/ea17a4159db3e221a0e3fc1c7d1ad3b6 to your computer and use it in GitHub Desktop.
Save mamaz/ea17a4159db3e221a0e3fc1c7d1ad3b6 to your computer and use it in GitHub Desktop.

MERGE CONTACTS

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: "ahmad.b@email.com"
    }
    phone: {
         kantor: "0211234678"
         hp: "082112300676"   
    }
}

dan contact

{
    fullname: "Ahmad Bustomi"
    email: {
        personal: "ahmad.b@ahmadbustomi.com"
    }
    phone: {
         hp: "082112300676"
         hp_jadul: "081314735686"
    }
}

menjadi

{
    id: "1234"
    fullname: "Ahmad Bustomi"
    email: {
        personal: "ahmad.b@ahmadbustomi.com",
        kantor: "ahmad.b@email.com"
    }
    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment