[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
質問
一意であることを確認する必要がある数値の配列があります。インターネットで下記のコードを見つけ、配列にゼロが含まれるまではうまくいきました。そこで この他のスクリプト Stack Overflowのこのページで、ほとんど同じように見えますが、これは失敗しません。
そこで、私の勉強のために、どなたかプロトタイプのスクリプトがどこで間違っているのか判断するのを手伝っていただけないでしょうか。
Array.prototype.getUnique = function() {
var o = {}, a = [], i, e;
for (i = 0; e = this[i]; i++) {o[e] = 1};
for (e in o) {a.push (e)};
return a;
}
重複している質問の回答をもっと見る。
似たような質問
どのように解決するのですか?
とは
JavaScript 1.6
/
ECMAScript 5
を使用すると、ネイティブの
filter
メソッドを使用すると、一意な値を持つ配列を取得できます。
function onlyUnique(value, index, self) {
return self.indexOf(value) === index;
}
// usage example:
var a = ['a', 1, 'a', 2, '1'];
var unique = a.filter(onlyUnique);
console.log(unique); // ['a', 1, 2, '1']
ネイティブメソッド
filter
は配列をループし、指定したコールバック関数を通過するエントリのみを残します。
onlyUnique
.
onlyUnique
は、与えられた値が最初に発生したものであるかどうかをチェックします。もしそうでなければ、それは重複しているはずなので、コピーされません。
この方法は、jQueryやprototype.jsのような追加のライブラリなしで動作します。
値の型が混在する配列にも有効です。
ネイティブメソッドに対応していない古いブラウザ(<ie9)の場合
filter
と
indexOf
については、MDNドキュメントで回避策を見つけることができます。
フィルター
と
インデックスオブ
.
ある値の最後の出現を保持したい場合は、単に
indexOf
を
lastIndexOf
.
ES6では、これを短縮することができます。
// usage example:
var myArray = ['a', 1, 'a', 2, '1'];
var unique = myArray.filter((v, i, a) => a.indexOf(v) === i);
console.log(unique); // unique is ['a', 1, 2, '1']
ありがとうございます。 カミロ・マーティン コメントでヒントをいただきました。
ES6では、ネイティブオブジェクト
Set
を使用して一意な値を格納します。一意な値を持つ配列を得るには、今ならこのようにすればよいでしょう。
var myArray = ['a', 1, 'a', 2, '1'];
let unique = [...new Set(myArray)];
console.log(unique); // unique is ['a', 1, 2, '1']
のコンストラクタは
Set
は、Array のような反復可能なオブジェクトを受け取り、拡散演算子
...
は、セットを配列に戻す。おかげさまで
Lukas Liese
コメントでヒントをいただきました。
関連
-
WeChatアプレット用ユニアプリによるグローバルシェアリング
-
vueにおけるfilterの適用シーンについて解説します。
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Vueの要素ツリーコントロールに破線を追加する説明
-
JSアレイループと効率解析の比較
-
Vueはランニングライト形式のテキストを水平方向にスクロールする機能を実装している
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
[解決済み】ローカルファイルを開くことができません - Chrome: ローカルリソースの読み込みが許可されていない
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み】ExpressJS - throw er Unhandled errorイベント
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
[解決済み] JS配列から重複する値を削除する【重複】について
-
[解決済み】配列で一意な値を取得する方法【重複している