[解決済み] Javascriptで、配列の値が重複しているかどうかを確認するにはどうすればよいですか?
2022-08-22 21:05:15
質問
重複している可能性があります。
javascriptの配列で重複する値を見つける最も簡単な方法
配列に重複する値があるかどうかを確認するにはどうすればよいですか?
配列の一部の要素が同じであれば、trueを返します。そうでなければ、falseを返します。
['hello','goodbye','hey'] //return false because no duplicates exist
['hello','goodbye','hello'] // return true because duplicates exist
私は重複を見つけることには関心がなく、配列が重複を含むかどうかのブール値の結果が欲しいだけであることに注意してください。
どのように解決するのですか?
ES2015の環境(本稿執筆時点:io.js、IE11、Chrome、Firefox、WebKit nightly)があれば、以下の方法で動作し、かつ高速(O(n))に動作します。
function hasDuplicates(array) {
return (new Set(array)).size !== array.length;
}
配列に文字列の値だけが必要な場合は、以下のようにすればうまくいきます。
function hasDuplicates(array) {
var valuesSoFar = Object.create(null);
for (var i = 0; i < array.length; ++i) {
var value = array[i];
if (value in valuesSoFar) {
return true;
}
valuesSoFar[value] = true;
}
return false;
}
ハッシュテーブルを使用します。
valuesSoFar
を使用し、キーはこれまで配列で見てきた値です。ルックアップを行うには
in
を使用して、その値がすでに検出されているかどうかを調べます。もしそうなら、ループから抜けて
true
.
文字列以外の値に対しても機能する関数が必要な場合は、次のようにすれば動作しますが、性能はそれほど高くありません。 2 ) です。
function hasDuplicates(array) {
var valuesSoFar = [];
for (var i = 0; i < array.length; ++i) {
var value = array[i];
if (valuesSoFar.indexOf(value) !== -1) {
return true;
}
valuesSoFar.push(value);
}
return false;
}
のハッシュテーブルの代わりに配列を使っているだけの違いです。
valuesSoFar
JavaScriptのハッシュテーブル(つまりオブジェクト)は文字列のキーしか持っていないからです。つまり、O(1) のルックアップ時間を失った
in
のルックアップ時間を失い、代わりに O(n) のルックアップ時間を持つ
indexOf
.
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] JavaScript で css プロパティを使用して HTML 要素の背景色を設定する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 配列中の一意でない値(重複している/複数回出現している)をすべて取得する
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] React js 親コンポーネントから子コンポーネントの状態を変更する
-
[解決済み] javascript includes() 大文字小文字を区別しない
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?