JavaScriptのカスタム関数で配列から重複要素をすべて削除する方法
概要
リテラル値の配列を受け取るJavaScript関数を作成する必要があります。ある要素が配列内に2回以上出現している場合、その要素のすべての出現箇所を配列から削除しなければなりません。
たとえば、入力配列が次のような場合——
const arr = [1,2,3,4,4,5,5];
期待される出力は次のとおりです。
const output = [1, 2, 3];
このように、単に重複を1つ残すのではなく、重複している要素自体を配列から完全に取り除く点がポイントです。
実装例
以下のコードでは、指定した値を配列からすべて削除する補助関数 removeAll を用意し、各要素について indexOf() と lastIndexOf() の結果を比較して重複を検出したうえで、重複要素を丸ごと除去する eradicateDuplicates 関数を実装しています。
const arr = [1, 2, 3, 4, 4, 5, 5];
const removeAll = (arr = [], val) => {
while(arr.includes(val)){
const index = arr.indexOf(val);
arr.splice(index, 1);
};
};
const eradicateDuplicates = (arr = []) => {
for(let i = 0; i < arr.length; ){
const el = arr[i];
if(arr.indexOf(el) === arr.lastIndexOf(el)){
i++;
continue;
};
removeAll(arr, el);
};
};
eradicateDuplicates(arr);
console.log(arr);
コードのポイント
- removeAll関数:includes() で値の存在を確認し、indexOf() で位置を特定して splice() で削除する処理を、該当する値がなくなるまで繰り返します。
- eradicateDuplicates関数:要素の最初の出現位置(indexOf)と最後の出現位置(lastIndexOf)が一致しない場合、それは「重複している」ことを意味するため、removeAll で完全に取り除きます。
- 削除後はインデックス i を進めずに同じ位置を再チェックすることで、削除によって前へずれた要素の取りこぼしを防いでいます。
出力結果
コンソールには次のように出力されます。
[1, 2, 3]
-
JavaScriptでJSON.stringify()を使ってオブジェクトから関数を削除する方法
JSON.stringify()でオブジェクトから関数を削除するJavaScriptでオブジェクトから関数(メソッド)を取り除きたい場面は少なくありません。実は、JSON.stringify() メソッドを使うと、オブジェクトを文字列化する処理の中で、自動的に関数が削除された状態の結果を得ることができます。これは、JSONフォーマット自体が関数やundefinedといった値をサポートしていないためです。JSON.stringify()は文字列化の過程でこれらの値を無視するため、結果として「関数を含まないオブジェクト」を作り出すことができます。以下に具体例を挙げて詳しく解説します。例1:値として
-
JavaScriptのArray.prototype.map()メソッドの使い方を徹底解説
Array.prototype.map()とは? JavaScriptのArray.prototype.map()メソッドは、配列の各要素に対してコールバック関数を実行し、その戻り値から新しい配列を作成するためのメソッドです。元の配列は変更されないため、安全にデータ変換を行いたい場合に非常に便利です。 構文 arr.map(function callback(currentValue[, index[, array]]) 各引数の意味は以下のとおりです。 currentValue:現在処理している要素の値 index(省略可能):現在処理している要素のインデックス番号 array(省略可能