配列の判定
配列の重複排除と平坦化の方法について話す前に、まず配列の判定方法について話しましょう。配列を処理するには、当然、渡されたデータが配列であるかどうかを判定する必要があります。
まず、js には 5 つのデータ型しかないことは誰もが知っています。つまり、配列は、typeof([]) によって返される単なるオブジェクトです。他の方法で判断するには、次の 2 つの方法があります。
最初の方法は、instanceof を使用することです
instanceof は、インスタンスが特定のクラスのインスタンスであるかどうかを判断するために使用できます。たとえば:
[] instenceof Array //返回结果是true
このメソッドの欠点は次のとおりです。互換性 いいえ、ES5 をサポートしていない下位バージョンのブラウザでは混乱を招く可能性があります。
2つ目の方法は、プロトタイプチェーンを通して判断する方法です
jsを理解している人であれば、js言語の特徴はすべてのオブジェクトがObject.prototypeを継承しており、プロトタイプにはtoString()メソッドがあることを理解しているはずです。この toString() メソッドは何に使用されますか?現在のオブジェクトの値を文字列の形式で返します。初めてこの文を読んだときは理解できないかもしれません。例を示します。
var num = 123; num.toString(); //返回结果为"123"
少しは理解できましたか?オブジェクト値 num の文字列形式、つまり「123」を返します。さて、これは配列の判定と何の関係があるのでしょうか?考えてみてください。すべてのオブジェクトは Object.prototype から継承しており、配列も同様です。配列を Object.prototype に「値」として送信して toString() メソッドを呼び出すと、オブジェクトの名前が表示されるはずです。これが判定の原理です。 コードは次のとおりです。
Object.prototype.toString.call([]); //结果是"[object Array]"
これは、jQuery などのスクリプト ライブラリの isArray() で使用されるメソッドです。
配列の平準化
その後、まず配列の平準化とは何でしょうか。 [1,[2,[3,4],5]] を [1,2,3,4,5] に舗装するだけです。配列の平坦化については 2 つのアイデアがあります。2 つ目はかなり奇妙なものなので、少し不安を残しておいてください (笑)。
1 つ目は従来の考え方です
配列内に配列がある場合は、すべての要素が走査されるまでそれを走査し続け、走査中にそれを新しい配列変数に挿入します。具体的なコードは次のとおりです:
panelArr = function(arr){ var newArr = []; var isArray = function(obj) { return Object.prototype.toString.call(obj) === '[object Array]'; }; var dealArr = function(arr){ for (var i = 0;i<arr.length;i++){ isArray(arr[i]) ? dealArr(arr[i]) : newArr.push(arr[i]); } }; dealArr(arr); return newArr; }; console.log(panelArr([1,[2,3]])); //[1,2,3]
もちろん、このメソッドは Array.prototype で記述することもでき、その方が使いやすいです。この方法の問題の 1 つは、データ量が大きい場合、再帰によって多くのメモリが占有されるため、メモリ使用量です。
2 番目の奇妙なアイデア
2 番目のアイデアは、配列を見たり走査したりせずに配列を平坦化することです。少し奇妙に聞こえますが、どうすればトラバースせずにフラットに撃つことができますか? join() メソッドを使用して配列を文字列に変換し、通常の記号を削除して最後にマージするだけです。このメソッドを使用する場合は、このように分割すると 13 1 と 3 になるため、join("") を行わないように注意してください。それとも13?区別するのは難しいですが、コードは次のとおりです:
var arr = [1,2,[33,43],20,19]; arr.join(".").replace(/,/g,".").split("."); //["1", "2", "33", "43", "20", "19"]
注: このメソッドはデータ型を文字列に変換します。
配列の重複排除
たとえば、[1,2,3,3,4,5,5,5,6] は [1,2,3,4,5,6] ] になります。この実装の核心は、重複を削除することです。重要なのは、要素が繰り返されているかどうかを迅速に判断できることです。
まだ 2 つのアイデアがあります
最初のトラバーサルのアイデアは、挿入する前に毎回この変数をトラバースして重複があるかどうかを確認し、重複がない場合は挿入して最終的に生成することです。新しいアレイは重複排除後のアレイです。サンプルコードは以下の通りです。
function uniqueArr(arr){ var newArr = []; newArr.push(arr[0]); for(var i = 1; i<arr.length;i++){ var repeat = false; for(var j = 0;j<newArr.length;j++){ if(arr[i] == newArr[j]){ repeat = true; } } if(!repeat){ newArr.push(arr[i]); } } return newArr; }
2番目の方法はハッシュ判定を使用する方法です
時間計算量がO(n^2)の上記の方法は、良い方法ではありません。これを繰り返すため、重複を取得するより効率的な方法に切り替えましょう。この方法はハッシュの取得が最も速いのはなぜでしょうか。データ構造を見てみましょう。ここでは詳細には触れません。
この方法の考え方は、元の配列と重複排除された配列の間にハッシュ フィルターを追加することです。一般的に、元の配列データがハッシュに渡され、重複がない場合は追加されます。具体的なコードは次のとおりです。
function uniqueArr(arr){ var newArr = [], hashFilter = {}; for(var i = 0;i<arr.length;i++){ if(!hashFilter[arr[i]]){ //若不存在将此属性对应的值改为true,并塞入去重数组中 hashFilter[arr[i]] = true; newArr.push(arr[i]); } } return newArr; }
私は 2 番目のコードを好みます。繰り返すかどうかの判断が非常に速く、数秒で完了すると言えるからです。
概要
上記がこの記事の全内容です。この記事の内容が皆さんの学習や仕事に少しでも役立つことを願っています。ご質問がある場合は、メッセージを残して連絡してください。
JavaScript での配列の重複排除と平坦化メソッドのその他の例については、PHP 中国語 Web サイトに注目してください。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

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

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
