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?


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


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 ..


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.


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');

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.


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

1

Sie können verwenden filterzu

this.products = array_products.filter((x) => x.Name.includes("ABC"))

0

mag das:

departments: string[]=[];
if(this.departments.indexOf(this.departmentName.trim()) >-1 ){
            return;
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.