js配列を操作して重複を削除する方法
配列から重複を削除することはよくある質問であり、面接でも仕事でも、重複を削除する方法はたくさんありますが、どれが良いか、どちらが悪いかを判断することはできません。実際のニーズに応じて。この記事では、いくつかの一般的な重複削除方法と、その方法の長所、短所、および適用可能な状況をリストします。間違いがあれば修正してください。
1. 二重ループの比較方法:
const array = [1, NaN, '1', null, /a/, 1, undefined, null, NaN, '1', {}, /a/, [], undefined, {}, []];function uniqueByCirculation(arr) { const newArr = []; let isRepet = false; for(let i=0;i < arr.length; i++) { for(let j=0;j < newArr.length; j++) { if(arr[i] === newArr[j]) { isRepet = true; } }; if(!isRepet) { newArr.push(arr[i]); }; }; return newArr; }const uniquedArr = uniqueByCirculation(array); console.log(uniquedArr);
結果: 結果から、Array、Object、および RegExp が保持され、NaN が重複排除されていないことがわかります。 === メカニズムは整っています。詳細については、お読みください:
このメソッドの時間計算量は O(NlogN) で、空間計算量は O(N) です。適用可能なケース: 単純なデータ型と少量のデータ。
2.indexOfメソッド:
const array = [1, NaN, '1', null, /a/, 1, undefined, null, NaN, '1', {}, /a/, [], undefined, {}, []];function uniqueByIndexOf(arr) { return arr.filter((e, i) => arr.indexOf(e) === i); }const uniquedArr = uniqueByIndexOf(array);console.log(uniquedArr);
結果:
結果から判断すると、NaNがなくなり、Array.indexOf(NaN)が残っているためです。は常に - 1 を返します。他の複合型によって返される値は常にそれ自体のインデックスと等しいため、この結果が得られます。この方法の時間と空間の複雑さは二重ループの場合と同じであり、適用できる状況も同様です。もちろん、この方法と比較すると、コードが短いため、この方法が最初に推奨されます。
3. Object[key]メソッド: (Personal Depth Enhanced version)
const array = [1, '1', NaN, 1, '1',NaN, -0, +0, 0, null, /a/, null, /a/, [], {}, [], {}, [1,2,[2,3]], [1,2,[2,3]], [1,2,[3,2]], undefined, {a:1,b:[1,2]}, undefined, {b:[2,1],a:1}, [{a:1},2], [2,{a:1}], {a:{b:1,d:{c:2,a:3},c:1},c:1,d:{f:1,b:2}}, {a:{b:1,d:{c:2,a:3},c:1},c:1,d:{f:1,b:2}}];function uniqueByObjectKey(arr) { const obj = {}; const newArr = []; let key = ''; arr.forEach(e => { if(isNumberOrString(e)) { // 针对number与string和某些不适合当key的元素进行优化 key = e + typeof e; }else { if(e&&isObject(e)){ // 解决同key同value对象的去重 e = depthSortObject(e); } key = JSON.stringify(e) + String(e); //JSON.stringify(e)为了应对数组或对象有子内容,String(e)为了区分正则和空对象{} } if(!obj[key]) { obj[key] = key; newArr.push(e); } }); return newArr; }function isNumberOrString(e){ return typeof e === 'number' || typeof e === 'string'; }function isObject(e){ return e.constructor === Object; }function depthSortObject(obj){ if(obj.constructor !== Object){ return; } const newobj = {}; for(const i in obj){ newobj[i] = obj[i].constructor === Object ? sortObject(depthSortObject(obj[i])) : obj[i]; } return newobj; }function sortObject(obj){ const newObj = {}; const objKeys = Object.keys(obj) objKeys.sort().map((val) => { newObj[val] = obj[val]; }); return newObj; }const uniquedArr = uniqueByObjectKey(array); console.log(uniquedArr);
結果: このメソッドは、キーを直接変更する関数に型判定を追加したため、「深い重複排除*」の結果を得ました。 object [original key] は数値と文字列を四捨五入するため、多くの型はキーとして使用できません。私は関数を作成する過程で JSON.stringify(/a/) に騙されました。 {}・~・の問題。後でキーを出力するときに、JSON.string(/a/) === '{}'、String([]) === "であることがわかったので、変換する必要がありました空間計算量は O (N)、時間計算量は O(N) で、深度を繰り返したい場合に適しています (*: 私自身も名前を繰り返したいので、オブジェクトは本質的に無秩序です。つまり、{a:1,b: 2} は {b:2,a:1} と同等である必要があるため、オブジェクトの内部 key:value が同じ)
4. ES6 Set メソッド:
const array = [1, NaN, '1', null, /a/, 1, undefined, null, NaN, '1', {}, /a/, [], undefined, {}, []];function uniqueByES6Set(arr) { return Array.from(new Set(arr)) // return [...new Ser(arr)]}const uniquedArr = uniqueByES6Set(array); console.log(uniquedArr);
結果:
結果から、Array、Object、および RegExp が保持されることがわかります。このメソッドの原理は、順序付けされておらず、繰り返しのないデータ構造です。データの Set 構造の詳細については、Set and Map-Ruan Yifeng、空間複雑さ O(N)、時間複雑さの位置を参照してください。このメソッドは非常に高速です。複雑なオブジェクトを保持する場合は、これを直接使用するのが最適です
5 . ES6 Map メソッド:
const array = [1, NaN, '1', null, /a/, 1, undefined, null, NaN, '1', {}, /a/, [], undefined, {}, []];function uniqueByES6Map(arr) { const map = new Map(); return arr.filter(e => { return map.has(e) ? false : map.set(e, 'map') }) }const uniquedArr = uniqueByES6Map(array); console.log(uniquedArr);
結果: 結果は Set を使用した場合と同じで、主に ES6 の構造マップを使用して、キーをキーと値のグループにマッピングして保存できるのが特徴です。任意のタイプであり、データはハッシュ アドレスを通じてマッピングされます。ただし、アドレスの実際のコストは Set よりも高くなります。複雑なオブジェクトを保持する場合にも適しています。
この記事では、配列を重複排除する 5 つの一般的な方法を説明します。オブジェクト配列を削除する場合は、原則として、最初の 3 つの方法を使用します。 . もちろん、3 番目のタイプの結果は、少し変更すると次のものと同じになります
配列の重複排除は、面接や作業に関係します。 重複排除には多くの方法があります。この記事では、実際のニーズに応じて選択できます。また、その方法の長所と短所、および適用可能な場合についても説明します。
以上がjs配列を操作して重複を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









WeChat は主流のチャット ツールの 1 つであり、WeChat を通じて新しい友人に出会ったり、古い友人に連絡したり、友人間の友情を維持したりすることができます。永遠に終わらない宴会など存在しないように、人間同士が仲良くなれば必ず意見の相違が生じます。ある人があなたの気分に極度に影響を与える場合、または仲良くなったときに意見が一致しないことがわかり、コミュニケーションが取れなくなった場合、WeChat の友人を削除する必要がある場合があります。 WeChatの友達を削除するにはどうすればよいですか? WeChat友達を削除する最初のステップ:WeChatメインインターフェースで[アドレス帳]をタップします; 2番目のステップ:削除したい友達をクリックして[詳細]を入力します; 3番目のステップ:上部の[...]をクリックします右隅; ステップ 4: 下の [削除] をクリックします; ステップ 5: ページのプロンプトを理解した後、[連絡先を削除] をクリックします;

トマト ノベルは非常に人気のある小説閲覧ソフトウェアです。トマト ノベルでは、新しい小説や漫画を読むことができます。どの小説も漫画もとても面白いです。小説を書きたい友達もたくさんいます。お小遣いを稼いで、小説の内容を編集することもできます。 「テキストに文章を書きたいです。それで、小説はどうやって書くのですか?友達は知らないので、一緒にこのサイトに行きましょう。小説の書き方の入門を少し見てみましょう。」 Tomato Novels を使用して小説を書く方法に関するチュートリアルを共有します。 1. まず、携帯電話で Tomato Free Novels アプリを開き、パーソナル センター - ライター センターをクリックします。 2. Tomato Writer Assistant ページに移動し、次の場所で [新しい本の作成] をクリックします。小説の終わり

Colorful マザーボードは中国国内市場で高い人気と市場シェアを誇っていますが、Colorful マザーボードのユーザーの中には、設定のために BIOS を入力する方法がまだ分からない人もいます。この状況に対応して、編集者はカラフルなマザーボード BIOS に入る 2 つの方法を特別に提供しました。ぜひ試してみてください。方法 1: U ディスク起動ショートカット キーを使用して、U ディスク インストール システムに直接入ります。ワンクリックで U ディスクを起動する Colorful マザーボードのショートカット キーは ESC または F11 です。まず、Black Shark インストール マスターを使用して、Black Shark インストール マスターを作成します。 Shark U ディスク起動ディスクを選択し、コンピュータの電源を入れます。起動画面が表示されたら、キーボードの ESC キーまたは F11 キーを押し続けて、起動項目を順次選択するウィンドウに入ります。「USB」の場所にカーソルを移動します。 」と表示され、その後

残念ながら、WeChat は広く使用されているソーシャル ソフトウェアであり、何らかの理由で特定の連絡先を誤って削除してしまうことがよくあります。ユーザーがこの問題を解決できるように、この記事では、削除された連絡先を簡単な方法で取得する方法を紹介します。 1. WeChat の連絡先削除メカニズムを理解します。これにより、削除された連絡先を取得できるようになります。WeChat の連絡先削除メカニズムでは、連絡先がアドレス帳から削除されますが、完全には削除されません。 2. WeChat の組み込みの「連絡先帳復元」機能を使用します。WeChat には、この機能を通じて以前に削除した連絡先をすばやく復元できる「連絡先帳復元」機能が用意されています。 3. WeChat 設定ページに入り、右下隅をクリックし、WeChat アプリケーション「Me」を開き、右上隅にある設定アイコンをクリックして設定ページに入ります。

携帯電話が人々の日常生活において重要なツールになるにつれて、フォント サイズの設定は重要なパーソナライゼーション要件になりました。さまざまなユーザーのニーズを満たすために、この記事では、簡単な操作で携帯電話の使用体験を向上させ、携帯電話のフォントサイズを調整する方法を紹介します。携帯電話のフォント サイズを調整する必要があるのはなぜですか - フォント サイズを調整すると、テキストがより鮮明で読みやすくなります - さまざまな年齢のユーザーの読書ニーズに適しています - フォント サイズを使用すると、視力の悪いユーザーにとって便利です携帯電話システムの設定機能 - システム設定インターフェイスに入る方法 - 設定インターフェイスで「表示」オプションを見つけて入力します。 - 「フォント サイズ」オプションを見つけて、サードパーティでフォント サイズを調整します。アプリケーション - フォント サイズの調整をサポートするアプリケーションをダウンロードしてインストールします - アプリケーションを開いて、関連する設定インターフェイスに入ります - 個人に応じて

Win11 管理者権限の取得方法のまとめ. Windows 11 オペレーティング システムでは、管理者権限は、ユーザーがシステム上でさまざまな操作を実行できるようにする非常に重要な権限の 1 つです。ソフトウェアのインストールやシステム設定の変更など、一部の操作を完了するために管理者権限の取得が必要になる場合があります。以下にWin11の管理者権限を取得する方法をまとめましたので、お役に立てれば幸いです。 1. ショートカット キーを使用する Windows 11 システムでは、ショートカット キーを使用してコマンド プロンプトをすばやく開くことができます。

テクノロジーの発展に伴い、モバイルゲームは人々の生活に欠かせないものになりました。かわいいドラゴンエッグの画像と面白い孵化過程で多くのプレイヤーの注目を集めており、その中でも注目を集めているゲームの一つがモバイル版ドラゴンエッグです。プレイヤーがゲーム内で自分のドラゴンをより適切に育成し成長させることができるように、この記事ではモバイル版でドラゴンの卵を孵化させる方法を紹介します。 1. 適切な種類のドラゴン エッグを選択する プレイヤーは、ゲーム内で提供されるさまざまな種類のドラゴン エッグの属性と能力に基づいて、自分に適したドラゴン エッグの種類を慎重に選択する必要があります。 2. 孵化機のレベルをアップグレードします。プレイヤーはタスクを完了し、小道具を収集することで孵化機のレベルを向上させる必要があります。孵化機のレベルは孵化速度と孵化成功率を決定します。 3. プレイヤーはゲームに参加する必要がある孵化に必要なリソースを収集します。

Oracleバージョンのクエリ方法を詳しく解説 Oracleは、世界で最も人気のあるリレーショナルデータベース管理システムの1つで、豊富な機能と強力なパフォーマンスを提供し、企業で広く使用されています。データベースの管理と開発のプロセスでは、Oracle データベースのバージョンを理解することが非常に重要です。この記事では、Oracle データベースのバージョン情報をクエリする方法と具体的なコード例を詳しく紹介します。単純な SQL ステートメントを実行して、Oracle データベース内の SQL ステートメントのデータベース バージョンをクエリします。
