Membuat ulang reduce function

Membuat ulang reduce function

jadi ceritanya, gw kmarin sempet interview di salah satu startup di singapore.. dah waktu interview itu gw dpt 1 pertanyaan yang gw gabisa jawab, tapi menurut gw menarik.. jadi gw disuruh buat ulang reduce function.. akhirnya kelar interview karna gw penasaran gw langsung coba gugling, dan ga nemu nemu jawabanya.. yaudahlah gw coba coba sendiri

jadi langsung aja gw kasih tau gimana cara gw

1Array.prototype.reduceBoongan = function (callback, initValue) {
2  let arr = this.valueOf();
3  let total = initValue ? initValue : arr[0];
4  for (let i = initValue ? 0 : 1; i < arr.length; i++) {
5    total = callback(total, arr[i], i, arr);
6  }
7  return total;
8};

Ok, sekarang gw bakal jelesin 1 per 1..
perama coba liat disni
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
reduce terdiri dari callback sama initialValue, nah callbacknya sendiri punya 4 parameter yaitu accumulator, currentValue,index, dan array..

sbelumnya bahkan gw aja taunya parameter callback itu isinya cuma total sama currentValue.. gimana bisa ngerjain ini pertanyaan ==”

Ok, lanjut..

1Array.prototype.reduceBoongan = function (callback, initValue) {

Sesuai dengan petunjuk diatas kita bikin fungsi dengan 2 parameter yaitu callback dan initValue

1  let total = initValue ? initValue : arr[0];

disini kita cek, apakah punya initValue atau ga, kalo ga kita pake item pertama dari array sebagai initial value

1  for (let i = initValue ? 0 : 1; i < arr.length; i++) {

nah, disini kita juga cek apakah ada initvalue, kalo tidakada karna kita pakai item pertama sebagai initial value maka kita akan mulai dari index ke 1, sedangkan kalo gada kita mulai dari index ke 0

1  total = callback(total, arr[i], i, arr);

sekarang kita simpan hasil callback di variable total, dan kasih arguments sesuai ketentuan parameter diatas (accumulator,currentValue,index, dan array)

Nah.. sekarang tinggal return dan bisa di test

1const a = [1,2,3,4]
2a.reduce((a,b)=>a+b)
3//will return 10
4a.reduceBoongan((a,b)=>a+b)
5//will return 10
6
7a.reduce((a,b)=>a+b,'hello')
8//will return hello1234
9a.reduceBoongan((a,b)=>a+b,'hello')
10//will return hello1234

jadi.. apakah ini jawaban terbaik? tentu tidak ferguso.. ini cuma jawaban versi gw.. pasti masih ada error2 dikit (mungkin), kalo ada jawaban yg lebih bagus bisa coba kasih tau nanti saya apdet..

Ok segitu dulu aja post bikin ulang reduce function ini.. terima kasih

tutorial