Wie überprüfe ich, ob ein Array eine Zeichenfolge in TypeScript enthält?

273

Derzeit verwende ich 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 eine Zeichenfolge 'drei' enthält?

Code1
quelle
16
Es sollte seinchannelArray: string[]
Nitzan Tomer
Dies ist nicht
typoskriptspezifisch

Antworten:

522

Das gleiche wie in JavaScript mit Array.prototype.indexOf () :

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

Oder verwenden Sie ECMAScript 2016 Array.prototype.includes () :

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

Beachten Sie, dass Sie auch Methoden wie die von @Nitzan gezeigte verwenden können, um eine Zeichenfolge zu finden. Normalerweise würden Sie dies jedoch nicht für ein String-Array tun, sondern für ein Array von Objekten. Dort waren diese Methoden sinnvoller. Beispielsweise

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 ()

baao
quelle
1
Ich erhalte eine [ts] Property 'includes' does not exist on type 'string[]'Fehlermeldung. Muss ich meine tsconfig aktualisieren, um diese ecma 6-Funktion zu unterstützen?
S ..
3
Herausgefunden. Ich musste "es7" in das Array für die Eigenschaft "lib" in meiner Datei tsconfig.json einfügen, z. "lib": ["es7", "dom"]
S ..
119

Sie können die Methode some verwenden :

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

Du kannst den ... benutzen Suchmethode verwenden :

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

Oder Sie können die indexOf-Methode verwenden :

console.log(channelArray.indexOf("three")); // 2
Nitzan Tomer
quelle
10

Wenn Ihr Code auf ES7 basiert:

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

Wenn nicht, verwenden Sie beispielsweise den IE ohne babel transpile:

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

Die indexOfMethode gibt die Position des Elements im Array zurück. Aus diesem Grund verwenden wir eine !==andere als -1, wenn sich die Nadel an der ersten Position befindet.

Alejoko
quelle
8

Beachten Sie auch, dass das Schlüsselwort "in" bei Arrays nicht funktioniert. Es funktioniert nur bei Objekten.

propName in myObject

Array-Inklusionstest ist

myArray.includes('three');
David Dehghan
quelle
1
Das ist eine erwähnenswerte Falle, besonders wenn Sie aus Python kommen. Schlimmer noch, es funktioniert irgendwie auch auf Arrays, da es sich auch um Objekte handelt. Ich arbeite einfach nicht so, wie Sie es wahrscheinlich denken - es prüft stattdessen, ob etwas im Array als Index vorhanden ist.
Cito
5

Verwenden Sie die JavaScript Array Includes () -Methode

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

Probieren Sie es aus » Link

Definition

Das beinhaltet () Methode bestimmt, ob ein Array ein bestimmtes Element enthält.

Diese Methode gibt true zurück, wenn das Array das Element enthält, und false, wenn nicht.

Basi
quelle
1

TS verfügt über viele Dienstprogrammmethoden für Arrays, die über den Prototyp von Arrays verfügbar sind. Es gibt mehrere, die dieses Ziel erreichen können, aber die beiden bequemsten für diesen Zweck sind:

  1. Array.indexOf() Nimmt einen beliebigen Wert als Argument und gibt dann den ersten Index zurück, an dem ein bestimmtes Element im Array gefunden werden kann, oder -1, wenn es nicht vorhanden ist.
  2. Array.includes()Nimmt einen beliebigen Wert als Argument und bestimmt dann, ob ein Array diesen Wert enthält. trueAndernfalls wird die Methode zurückgegeben, wenn der Wert gefunden wird false.

Beispiel:

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
Willem van der Veen
quelle
1

Sie können verwenden filterzu

this.products = array_products.filter((x) => x.Name.includes("ABC"))
Arvind Chourasiya
quelle
0

mag das:

departments: string[]=[];
if(this.departments.indexOf(this.departmentName.trim()) >-1 ){
            return;
    }
Abdus Salam Azad
quelle