EcmaScript 6
ES6を使用している場合は、アイテムの配列を作成し、次を使用できますincludes
。
['a', 'b', 'c'].includes('b')
これは、以上のいくつかの固有の利点があるindexOf
、それはの存在のために適切にテストすることができるのでNaN
、リスト内、およびこのような中間の一つとして欠けている配列要素を一致させることが可能[1, , 2]
にしますundefined
。などのJavaScript型付き配列でincludes
も機能しますUint8Array
。
ブラウザーサポート(IEやEdgeなど)が心配な場合は、CanIUse.Comで確認Array.includes
できます。不足しているブラウザーまたはブラウザーバージョンを対象にする場合はincludes
、ポリフィル用にpolyfill.io をお勧めします。
アレイなし
isInList
次のように新しいプロパティを文字列に追加できます。
if (!String.prototype.isInList) {
String.prototype.isInList = function() {
let value = this.valueOf();
for (let i = 0, l = arguments.length; i < l; i += 1) {
if (arguments[i] === value) return true;
}
return false;
}
}
次に、次のように使用します。
'fox'.isInList('weasel', 'fox', 'stoat') // true
'fox'.isInList('weasel', 'stoat') // false
でも同じことができますNumber.prototype
。
Array.indexOf
最新のブラウザを使用している場合は、indexOf
常に機能します。ただし、IE8以前では、ポリフィルが必要です。
indexOf
-1を返す場合、アイテムはリストにありません。ただし、このメソッドはを適切にチェックしないことに注意してください。NaN
明示的undefined
に一致することはできますが、欠落している要素をundefined
配列のように一致させることはできません[1, , 2]
。
IEのポリフィル、indexOf
またはincludes
サポートされていないその他のブラウザー/バージョン
上記のpolyfill.ioのようなサービスを使用したくない場合は、いつでも独自のソースコード標準に準拠したカスタムポリフィルを含めることができます。たとえば、Mozilla Developer Networkにはの1つがありindexOf
ます。
Internet Explorer 7のソリューションを作成する必要があったこの状況でindexOf()
は、標準に準拠していない関数の"独自の"より単純なバージョンを "ロールバック" しました。
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(item) {
var i = this.length;
while (i--) {
if (this[i] === item) return i;
}
return -1;
}
}
しかし、Array.prototype
長期的には修正が最善の答えだとは思いません。JavaScriptの変更Object
とArray
プロトタイプは重大なバグにつながる可能性があります。自分の環境で安全かどうかを判断する必要があります。主な注意点は、(Array.prototypeにプロパティが追加されている場合に)配列を反復するfor ... in
と、新しい関数名がキーの1つとして返されることです。
Array.prototype.blah = function() { console.log('blah'); };
let arr = [1, 2, 3];
for (let x in arr) { console.log(x); }
// Result:
0
1
2
blah // Extra member iterated over!
コードは動作するかもしれませんが、将来誰かがサードパーティのJavaScriptライブラリまたはプラグインを追加した瞬間に、継承されたキーに対して熱心に保護していなければ、すべてが壊れる可能性があります。
その破損を回避するための古い方法は、オブジェクトが実際に非継承されたプロパティとしてそれを持っているかどうかを確認するために、それぞれの値をチェックするために、列挙中に、あるif (arr.hasOwnProperty(x))
とだけにしているとの仕事x
。
この余分なキーの問題を回避する新しいES6の方法of
はin
、の代わりにを使用することですfor (let x of arr)
。ただし、すべてのコードとサードパーティのライブラリがこのメソッドに厳密に従うことを保証できない場合を除いて、この質問の目的には、おそらくincludes
上記のように使用することをお勧めします。