Cara Menerapkan Metode Array Pada JavaScript Sendiri
Cara Menerapkan Metode Array Pada JavaScript Sendiri
Cara Menerapkan Metode Array Pada JavaScript Sendiri-Babang Teknik. Kita semua menggunakan metode array seperti .map, .forEach, .filter, .reduce . Sebagai argumen, mereka selalu mengambil fungsi, yang pada gilirannya mengambil jumlah argumen yang berbeda. Saya selalu bertanya-tanya bagaimana mereka sampai di sana, tetapi tidak ada waktu untuk mengetahuinya sampai suatu hari di sebuah wawancara saya diminta untuk menulis implementasi saya dari salah satu metode array. Secara teori, itu tidak sulit, tetapi dalam praktiknya ternyata sedikit lebih sulit. Oleh karena itu, dalam artikel ini, kami akan menganalisis implementasi metode array utama kami.
.forEach
Sintaks dari metode ini adalah sebagai berikut:
arr.forEach(function(currentValue, index, array) {
//iterator Anda
},thisArg);
Jadi, menurut sintaks, metode kita harus mengambil 2 argumen, fungsi yang akan kita lewati elemen array: index , seluruh array. Argumen kedua adalah nilai yang akan sama dengan ini ketika dipanggil di dalam fungsi, tetapi ini tidak akan berfungsi untuk fungsi panah karena mereka tidak memiliki konteksnya sendiri.
Array.prototype.myForEach = function (callback, thisArg) {
// Check required argument type
if(typeof callback !== "function"){
throw new Error(`${typeof callback} is not a function`)
}
// Binding a context to a function
const f = callback.bind(thisArg)
for(let i = 0; i < this.length; i++) {
// Check exist element in array
if(i in this){
// Pass in arguments: element, index, array
f(this[i], i, this);
}
}
};
Selanjutnya, kami tidak akan menunjukkan tanda centang untuk jenis fungsi, karena akan sama untuk semua metode yang akan kami pertimbangkan.
.map
Sintaks dari metode ini adalah sebagai berikut:
const newArr = arr.map(function(currentValue, index, array){
//iterator Anda
}, thisArg)
Jadi, menurut sintaks, metode kami mirip dengan yang sebelumnya tetapi mengembalikan array baru
Array.prototype.myMap = function(callback, thisArg) {
// Create new array
const arr = [];
// Binding a context to a function
const f = callback.bind(thisArg)
for(let i = 0; i < this.length; i++) {
// Check exist element in array
if(i in this){
// Pass arguments: element, index, array. Push result to arr
arr[i] = f(this[i], i, this);
}
}
return arr
};
.filter
Sintaks dari metode ini adalah sebagai berikut:
const newArr = arr.map(function(currentValue, index, array){
//iterator Anda
}, thisArg)
Jadi, menurut sintaks, metode kami menulis ke array baru elemen-elemen yang tidak kosong dan panggilan fungsi mengembalikan true
Array.prototype.myFilter = function(callback, thisArg) {
// Create new array
const arr = [];
// Binding a context to a function
const f = callback.bind(thisArg)
for(let i = 0; i < this.length; i++) {
// Check exist element in array and call of function return true
if(i in this && !!f(this[i], i, this)){
// Add element value to end arr
arr[arr.length] = this[i];
}
}
// Return new array
return arr
};
.reduce
Sintaks dari metode ini adalah sebagai berikut:
const result = arr.reduce(function(accumulator, element, index, array){
//your iterator
}, initialAccumulator])
Jadi, menurut sintaks, metode kami mengembalikan nilai akumulasi setelah iterasi melalui elemen-elemen yang tidak kosong dari array
Array.prototype.myReduce = function(fn, accumulator) {
for(let i = 0; i < this.length; i++) {
// Check exist element in array
if(i in this){
// Accumulated result of call function
accumulator = fn(accumulator, this[i], i, this);
}
}
//return accumulator
return accumulator
};
.find
Sintaks dari metode ini adalah sebagai berikut:
const result = arr.find(function(currentValue, index, array) {
//iterator Anda
},thisArg);
Jadi, menurut sintaks, metode kami mengembalikan elemen array jika panggilan fungsi mengembalikan true jika tidak mengembalikan tidak terdefinisi
Array.prototype.myFind = function(callback, thisArg) {
// Binding a context to a function
const f = callback.bind(thisArg)
for(let i = 0; i < this.length; i++) {
// Check exist element in array and check if call of function return true
if(i in this && !!f(this[i], i, this)){
// Return element
return this[i]
}
}
};
.every
Sintaks dari metode ini adalah sebagai berikut:
const boolean = arr.every(callback(currentValue, index, array){
//iterator Anda
}, thisArg)
Array.prototype.myEvery = function(callback, thisArg) {
// Binding a context to a function
const f = callback.bind(thisArg)
for(let i = 0; i < this.length; i++) {
// Check exist element in array and check if call of function return true
if(i in this && !f(this[i], i, this)){
// Return false if any call of function returned false
return false
}
}
return true;
};
Tentu saja, implementasi ini tidak akan menggantikan metode bawaan untuk Anda, karena ada banyak pemeriksaan di sana, tetapi prinsip umum membangun metode Anda sendiri ditampilkan.
Semoga bermanfaat untuk Anda!
Posting Komentar untuk "Cara Menerapkan Metode Array Pada JavaScript Sendiri"