Wie prüfe ich, ob ein Array eine Zeichenkette in TypeScript enthält?

Derzeit bin ich mit Angular 2.0. Ich habe ein Array wie folgt:

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

Wie kann ich in TypeScript überprüfen, ob das channelArray einen String 'three' enthält?

Lösung

Dasselbe wie in JavaScript, unter Verwendung von Array.prototype.indexOf():

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

Oder mit ECMAScript 2016 Array.prototype.includes():

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

Beachten Sie, dass Sie auch Methoden wie die von @Nitzan gezeigten verwenden können, um eine Zeichenkette zu finden. Allerdings würde man das normalerweise nicht für ein String-Array tun, sondern eher für ein Array von Objekten. Dort waren diese Methoden sinnvoller. Zum Beispiel

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'}]

Referenz

Array.find()

Array.some()

Array.filter()

Kommentare (2)

Sie können die Methode some method verwenden:

console.log(channelArray.some(x => x === "three")); // true

Sie können die find-Methode verwenden:

console.log(channelArray.find(x => x === "three")); // three

Oder Sie können die indexOf-Methode verwenden:

console.log(channelArray.indexOf("three")); // 2
Kommentare (0)

Wenn Ihr Code auf ES7 basiert:

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

Wenn nicht, zum Beispiel, wenn Sie den IE ohne babel transpile verwenden:

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

die Methode indexOf gibt die Position zurück, die das Element im Array hat, deshalb verwenden wir !== anders als -1, wenn die Nadel an der ersten Position gefunden wird.

Kommentare (0)