JavaScriptでArray.prototype.filter()風のカスタム関数を実装する方法
問題
JavaScriptで、Arrayクラスのプロトタイプオブジェクト上に実装する関数を作成する必要があります。
この関数はコールバック関数を唯一の引数として受け取り、配列の各要素に対してそのコールバック関数を呼び出します。
コールバック関数は「現在の要素」と「そのインデックス」の2つの引数を受け取るものとします。コールバック関数がtrueを返した場合は対応する要素を出力配列に含め、そうでない場合は除外します。
実装例
以下が実際のコードです。
const arr = [5, 3, 6, 2, 7, -4, 8, 10];
const isEven = num => num % 2 === 0;
Array.prototype.customFilter = function(callback){
const res = [];
for(let i = 0; i < this.length; i++){
const el = this[i];
if(callback(el, i)){
res.push(el);
};
};
return res;
};
console.log(arr.customFilter(isEven));
出力結果
[ 6, 2, -4, 8, 10 ]
コードの解説
このcustomFilterメソッドの動作は次のとおりです。
- まず、結果を格納するための空の配列
resを用意します。 forループで配列を先頭から末尾まで走査し、各要素this[i]とそのインデックスiを引数としてコールバック関数に渡します。- コールバック関数の戻り値がtruthyであれば、その要素を
push()で結果配列に追加します。 - 走査が完了したら、条件を満たす要素だけを含んだ新しい配列を返します。
この例では、偶数かどうかを判定するisEvenをコールバックとして渡しているため、元の配列から偶数のみが抽出された[ 6, 2, -4, 8, 10 ]が出力されます。
なお、ネイティブのfilter()とは異なり、この簡易実装では疎な配列(スパース配列)の扱いや、第2引数によるthisの指定(thisArg)には対応していません。実運用で使う場合は必要に応じて拡張するとよいでしょう。
-
JavaScriptのArray.prototype.sort()メソッドの使い方をサンプルコードで解説
Array.prototype.sort()は、JavaScriptで配列の要素を並べ替えるための組み込みメソッドです。アルファベット順・数値順といった並び方に加えて、昇順・降順も自由に指定でき、配列操作の中でも特に使用頻度の高いメソッドの一つです。 ただし重要なポイントとして、sort()メソッドはデフォルトではすべての要素を文字列に変換してから比較します。そのため、数値の配列を意図したとおりに並べ替えたい場合は、比較関数を引数として渡す必要があります。 以下は、Array.prototype.sort()メソッドの基本的な使い方を示すサンプルコードです。 サンプルコード <!DOC
-
JavaScriptのArray.prototype.flat()メソッドとは?配列を指定した深さで平坦化する方法
Array.prototype.flat()メソッドとはJavaScriptのArray.prototype.flat()メソッドは、ネストされた配列を指定した深さまで再帰的に平坦化(フラット化)するためのメソッドです。元の配列を変更することはなく、平坦化された新しい配列を作成して返します。引数には平坦化の深さ(depth)を数値で指定します。省略した場合はデフォルトで「1」が適用され、「Infinity」を指定すればすべての階層のネストを完全に展開することも可能です。コード例以下は、Array.prototype.flat()メソッドを使用したサンプルコードです。<!DOCTYPE h