検索
ホームページウェブフロントエンドjsチュートリアルJavaScript 配列の重複を排除する 5 つの方法について詳しく見る

この記事では、JavaScript に関する関連知識を提供します。主に、es6 セットの重複排除、double for ループの重複排除、indexof など、配列の重複排除に関する関連問題を紹介します。重複排除の内容を見てみましょう。 . 皆様のお役に立てれば幸いです。

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

[関連する推奨事項: JavaScript ビデオ チュートリアル Web フロントエンド ]

最も簡単な方法、 ES6 セット重複排除 (最も推奨)

この方法は、すべての重複排除の中で最も簡単な使用方法であるため、日々の開発で私が最も気に入っている方法です。そして私は怠惰な癌患者です。

new Set は ES6 で導入された新しいタイプです。配列との違いは、Set 型のデータには繰り返し値を含めることができないことです。もちろん、配列の一部の Set メソッドは呼び出すことができません。

使用方法: 実際には非常に簡単で、配列を Set データに変換し、再度変換して重複排除を完了します。

    const arr = [1,1,2,2,3,3,4,4,5,5];
    const setData = Array.from(new Set(arr));
    console.log(setData);

イラスト

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

しかし、セットの重複排除には欠点があり、参照型のデータを重複排除することはできません。たとえば、オブジェクトの配列です。

凡例:

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

したがって、配列に値型データ (すべての文字列またはすべての数値など) が含まれている場合は、Set を使用して重複を削除する必要があります。あなたの最初の選択であり、多くのトラブルを避けることができます。

最も古い方法、double for ループで重複を削除する

昔、Set、map、または filter がなかったとき、double for ループが重複を削除するほぼ唯一の方法でした。

//双重循环去重
const handleRemoveRepeat = (arr) => {
    for (let i=0,len = arr.length; i < len; i++) {
        for (let j = i + 1; j < len; j++) {
            if (arr[i] === arr[j]) {
                arr.splice(j, 1);
                j--;
                len--;
            }
        }
    }
    return arr;
};

凡例:

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

ここに興味深い点があります。おそらく、私の for の最初の式で 2 つの宣言が宣言されている理由をよく理解していないかもしれません。何か: let i = 0;len = arr.length;

答えを教えてください:

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

3 つの丸で囲まれたものは、次の 3 つを表します。 forループの式には、初期式、判定式、自動インクリメント式があります。このうち、初期式はforループの先頭で一度実行され、以降は実行されませんが、判定式と自動インクリメント式はループが実行されるたびに実行されます。

言葉がよくわからなくても大丈夫、絵を描きました。

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

#後者のサークルのコンテンツがループに陥ることに気づいたかもしれません。

しかし、これは最初の len = arr.length とどのような関係があるのでしょうか?

最初に定義されている場合、各ループで arr.length を使用する必要があることに注意してください。length はメソッドですが、その消費量は大きくありませんが、for ループではこの消費量は次のようになります。このループを 10,000 回ループする必要があると仮定した場合、length は 10,000 回実行されます。

重複を削除する最も役に立たない方法である、indexOf deduplication

indexOf は、依然として比較的単純で役に立ちません。なぜ役に立たないと言われているのでしょうか? 言うのは難しいのですが、indexOf メソッドは確かに上記の double for ループよりも単純です。単純なことですが、彼には最初からやり直すことを簡単にする Set メソッドがありません。とても役に立たない。

//去重
const handleRemoveRepeat = (arr) => {
    let repeatArr = [];
    for (let i = 0,len = arr.length ; i < len; i++) 
     if (repeatArr.indexOf(arr[i]) === -1)  repeatArr.push(arr[i])
    return repeatArr;
}

凡例:

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

同様に、このメソッドにも詳細があります。上記の if と for には中括弧が含まれていないことに気づいたかもしれません。 ; for と if の両方がデフォルトで次のステートメントを担当します。必要な場合を除き、余分な {} を追加する必要はありません。

これは読めないと思われるかもしれませんが、ここが興味深い部分です。これはツール メソッドであり、ユーティリティに隠される運命にあるメソッドです。ビジネス ロジックとは何の関係もありませんし、そうする必要もありません複雑で読みやすい。

さらに、このように書く理由はもう 1 つあります。それは、人々に視覚的なインパクトを与えるためです。人間の言葉で言うと -----非常に大げさです;

indexOf に似た重複排除メソッドには重複排除が含まれます

includes を使用した重複排除メソッドは、indexOf とあまり変わりません。基本的にはまったく同じです。同じ。変わったのは判定方法だけです。

インクルードの判定方法がより簡単になりました。配列の各要素をループし、新しい配列を使用して、現在の配列に配列項目が含まれているかどうかを確認します。含まれていない場合は、要素

#

const handleRemoveRepeat = (arr) => {
    let repeatArr = [];
    for (let i = 0,len = arr.length ; i < len; i++)
        if (!repeatArr.includes(arr[i])) repeatArr.push(arr[i])
    return repeatArr;
}

Legend

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る# を追加します#includes このメソッドは、重複の削除以外のシナリオでも非常に役立ちます。

最有趣的去重方法,使用filter去重。

使用filter配合indexOf进行的去重过程,真的可以非常的简单且富含趣味性。

//去重
const handleRemoveRepeat = (arr) => arr.filter((item,index) => arr.indexOf(item,0) === index);

是的,没了,就一行。

图例

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

您是否没有反应过来?乍一看,不知道他是怎么完成去重的。

小问题,我为您解答疑惑。

indexOf的特性是返回被查找的目标中包含的第一个位置的索引

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

如图,下标为0和下标为4的位置存储的都是“1”。但是indexOf()只返回了0。因为indexOf的特性是返回被查找的目标中包含的第一个位置的索引。

同样的,我们可以利用这个特性。来完成去重,文字描述恐怕很难表达准确,您可以看看下面的这张图。

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

如果要去重对象数组怎么办?

去除对象数组的方式他并不是很稳定,这不像我们去重值类型数据的数组,上面的五种方法随便复制一种,往里面一调用就好了。绝对不会出问题。

但是对象数组去重,需要有一个去重条件,也就是根据哪个字段进行去重。

用双重循环去重举个例子:

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

图例

JavaScript 配列の重複を排除する 5 つの方法について詳しく見る

如上图,我们就是拿数据的id作为去重条件的。

像这样的对象数组就不能直接提供方法,因为每一个场景下的对象数组都不一定一样。我这是根据id去重,万一其他地方需要根据其他字段去重呢。

所以,如果您需要去重对象,根据上方的截图中的代码。使用双重for循环的方法,自己自定义一个可以满足您当前业务需求的去重方法。

【相关推荐:JavaScript视频教程web前端

以上がJavaScript 配列の重複を排除する 5 つの方法について詳しく見るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は掘金で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

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

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

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

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

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

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

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

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

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

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

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

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、