TypeScriptで配列に文字列が含まれているかどうかを確認するにはどうすればよいですか?


274

現在、Angular 2.0を使用しています。次のような配列があります。

var channelArray: Array<string> = ['one', 'two', 'three'];

TypeScriptで、channelArrayに文字列「3」が含まれているかどうかを確認するにはどうすればよいですか?


16
それはする必要がありますchannelArray: string[]
Nitzan Tomer 2017年


これは
Typescript

回答:


523

JavaScriptと同じ、Array.prototype.indexOf()を使用:

console.log(channelArray.indexOf('three') > -1);

またはECMAScript 2016 Array.prototype.includes()を使用

console.log(channelArray.includes('three'));

@Nitzanで示されているようなメソッドを使用して文字列を検索することもできます。ただし、通常は文字列配列ではなく、オブジェクトの配列に対して行います。そこではそれらの方法がより賢明でした。例えば

const arr = [{foo: 'bar'}, {foo: 'bar'}, {foo: 'baz'}];
console.log(arr.find(e => e.foo === 'bar')); // {foo: 'bar'} (first match)
console.log(arr.some(e => e.foo === 'bar')); // true
console.log(arr.filter(e => e.foo === 'bar')); // [{foo: 'bar'}, {foo: 'bar'}]

参照

Array.find()

Array.some()

Array.filter()


1
私は取得[ts] Property 'includes' does not exist on type 'string[]'エラーが、私はこのECMA 6機能をサポートするために私のTSconfigを更新する必要がありますか?
S ..

3
理解した。たとえば、tsconfig.jsonファイルのプロパティ「lib」の配列に「es7」を追加する必要がありました。"lib": ["es7", "dom"]
S ..


10

コードがES7ベースの場合:

channelArray.includes('three'); //will return true or false

そうでない場合、たとえば、BabelトランスパイルなしでIEを使用しています。

channelArray.indexOf('three') !== -1; //will return true or false

このindexOfメソッドは、要素が配列に持っている位置を返し!==ます。これは、針が最初の位置にある場合は-1とは異なるためです。


8

「in」キーワード は配列では機能しないことにも注意してください。オブジェクトでのみ機能します。

propName in myObject

アレイ包含テストは

myArray.includes('three');

2
これは、特にPythonを使用している場合は、言及する価値のある落とし穴です。さらに悪いことに、それらはオブジェクトでもあるため、配列にも機能します。私はあなたがおそらくそう思うはずの方法で動作しません-代わりにインデックスとして何かが配列に存在するかどうかをチェックします。
シト

5

JavaScript配列のcontains()メソッドを使用する

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var n = fruits.includes("Mango");

自分で試す» リンク

定義

含む()メソッドは、配列に指定された要素があるか否かを判定する。

このメソッドは、配列に要素が含まれている場合はtrueを返し、含まれていない場合はfalseを返します。


1

TSには、配列のプロトタイプを介して利用できる配列のユーティリティメソッドが多数あります。この目標を達成できる方法は複数ありますが、この目的に最も便利なものは次の2つです。

  1. Array.indexOf() 引数として任意の値を取り、指定された要素が配列内で見つかる最初のインデックスを返します。存在しない場合は-1を返します。
  2. Array.includes()引数として任意の値を取り、配列にこの値が含まれているかどうかを判別します。true値が見つかった場合に返されるメソッド、それ以外の場合false

例:

var channelArray: string[] = ['one', 'two', 'three'];
console.log(channelArray.indexOf('three'));      // 2
console.log(channelArray.indexOf('three') > -1); // true
console.log(channelArray.indexOf('four') > -1);  // false
console.log(channelArray.includes('three'));     // ture


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.