アレイの重複を排除するためのいくつかの方法を次に示します。
配列の重複排除方法 1: Set コレクションを使用して重複を排除する
//方法一:
function fun(arr){
let set = new Set(arr);
arr=Array.from(set);
return arr;
}
配列の重複排除方法 2: 新しい配列を作成し、重複のない配列要素を新しい配列に追加し、新しい配列を返します。
//方式二
function fun(arr) {
let arr1 = [];
for (let i = 0; i < arr.length; i++) {
if (arr1.indexOf(arr[i]) > -1) {
continue;
} else {
arr1.push(arr[i]);
}
}
return arr1;
}
配列の重複排除方法 3: 配列を走査して重複要素を特定し、削除します。
//方式三:
function fun(arr){
for(let i = 0;i<arr.length;i++){
for(let j = i+1;j<arr.length;){
if(arr[i]==arr[j]){
arr.splice(j,1)
}else{
j++
}
}
}
return arr;
}
配列の重複排除方法 4: 配列フィルター方法を使用して、1 回しか出現しない配列要素を除外します。
//方法四:
function fun(arr){
return arr.filter((item,index)=>arr.indexOf(item)==index);
}
配列の重複排除方法 5: 最初に出現した要素の添え字と最後に出現した要素の添え字を比較し、次の表が等しくない場合は、重複を意味し、1 つ削除してから ++
// 方法五:
function fun(arr){
for(let i=0;i<arr.length;){
if(arr.indexOf(arr[i])!=arr.lastIndexOf(arr[i])){
arr.splice(i,1)
}else{
i++
}
}
return arr;
}
配列の重複排除方法6:sort()メソッドで配列をソートし、隣接する要素を順番に比較し、等しいかどうかを確認し、等しい場合は以下の要素を削除します。
function fun(arr){
arr.sort();
for(let i = 0; i < arr.length-1; i++) {
if(arr[i] === arr[i+1]) {
arr.splice(i+1, 1);
i--;
}
}
return arr;
}
配列の重複排除方法 7:reduce() メソッドを使用して配列を走査し、配列要素を新しい配列に保存します要素が新しい配列にすでに存在する場合、再度保存されることはありません。
function fun(arr) {
return arr.reduce((prev, cur) => {
if(!prev.includes(cur)) {
prev.push(cur);
}
return prev;
}, []);
}
拡張配列スプライス方法:
拡張配列のreduceメソッド:
配列のreduce()メソッドは、配列内のすべての要素を累積するために使用される高階関数です。コールバック関数と初期値の 2 つのパラメータを受け取ります。コールバック関数には 4 つのパラメータが含まれています。
- アキュムレータ: アキュムレータ。最後のコールバック関数の実行結果 (つまり、累積値) を保存します。
- currentValue: 現在の要素、つまり配列内で現在処理されている要素。
- currentIndex: 現在の要素のインデックス。
- 配列: 現在の配列。
reduce() メソッドは、配列内の各要素に対してコールバック関数を順番に呼び出し、コールバック関数の戻り値をアキュムレータに追加して、最終結果を返します。
以下は、reduce() メソッドの構文です。
array.reduce(callback[, initialValue]);
このうち、callback は必須でコールバック関数、initialValue はオプションで初期値です。
配列のすべての要素の合計を計算する例を次に示します。
let arr = [1, 2, 3, 4, 5];
let sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 15
上記の例では、初期値は 0 で、コールバック関数によってアキュムレータと現在の要素が加算され、結果がアキュムレータに代入されます。したがって、最終結果は 15 になります。
配列が空で初期値が指定されていない場合、reduce() メソッドは TypeError 例外をスローすることに注意してください。配列に要素が 1 つしかない場合 (初期値が指定されているかどうかに関係なく)、その要素が戻り値になります。配列が空でも初期値が指定されている場合、初期値が戻り値になります。
上記は私がまとめた配列の重複排除の 7 つの方法です。他の方法がある場合は、ぜひ議論してください。