blog

インパクトの大きい配列の重複排除

forループ\n\nES678の登場です!\n配列から始めましょう\nvar a = [\n 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1\n 0x1, '1', '...

May 27, 2020 · 2 min. read
シェア

for

ES678

まずは配列から。

var baseArray = [1, 1, '1', '1', null, null, undefined, undefined, new String('1'), new String('1'), /a/, /a/, NaN, NaN ];

set

let unique_1 = arr => [...new Set(arr)]; console.log(unique_1(baseArray));

輸出

[1, "1", null, undefined, String, String, /a/, /a/, NaN]

filter

let unique_2 = arr => { let res = arr.filter((item, index, array) => { return array.indexOf(item) === index; // 配列内の現在の要素の最初の出現に対して真を返す。 }) return res; } console.log(unique_2(baseArray));

輸出

[1, "1", null, undefined, String, String, /a/, /a/]

これは、Array.indexOf(NaN)の値が-1であるため、NaNをフィルタリングします。

reduce

let unique_3 = arr => arr.reduce((pre, cur) => pre.includes(cur) ? pre : [...pre, cur], []); console.log(unique_3(baseArray));

輸出

[1, "1", null, undefined, String, String, /a/, /a/, NaN]

原理は通常のforループと同じで、最初に空の配列を宣言し、includesがfalseの場合、現在の要素をプッシュします。

キーと値のペア

let unique_4 = arr => { let obj = {}; return arr.filter(item => Reflect.has(obj, typeof item + item) ? false : (obj[typeof item + item] = true)); } console.log(unique_4(baseArray))

輸出

[1, "1", null, undefined, String, /a/, NaN]

ある意味、完璧なやり方です。

obj[typeof item + item] write reason: オブジェクトのキーは文字列でなければなりません。

Read next

Javaプロジェクト実践:フォームフロントエンド検証

ご視聴ありがとうございました。\nそれでは、今日の勉強を始めましょう:\n\n一般的に言って、大多数のウェブサイトはユーザー登録、ユーザーログイン、これらの基本的な機能を持っているでしょう。\nだから、ユーザー登録は具体的にどのように実現するのですか?\nこの2日間の主な学習登録ビジネスロジックを書き出す方法です。\n第一

May 27, 2020 · 4 min read