Jak sprawdzić, czy tablica zawiera ciąg znaków w TypeScript?

274

Obecnie używam Angular 2.0. Mam tablicę w następujący sposób:

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

Jak mogę sprawdzić w TypeScript, czy channelArray zawiera ciąg „trzy”?

kod1
źródło
16
Powinien to byćchannelArray: string[]
Nitzan Tomer
6
Możliwe duplikaty Jak sprawdzić, czy tablica zawiera obiekt w JavaScript?
Christopher Moore
To nie jest specyficzne dla
maszynopisu

Odpowiedzi:

523

To samo co w JavaScript, używając Array.prototype.indexOf () :

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

Lub przy użyciu ECMAScript 2016 Array.prototype.includes () :

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

Zauważ, że możesz również użyć metod takich jak pokazane przez @Nitzan, aby znaleźć ciąg znaków. Jednak zwykle nie zrobiłbyś tego dla tablicy ciągów, a raczej dla tablicy obiektów. Tam te metody były bardziej sensowne. Na przykład

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

Odniesienie

Array.find ()

Array.some ()

Array.filter ()

baao
źródło
1
[ts] Property 'includes' does not exist on type 'string[]'Pojawia się błąd, czy muszę zaktualizować mój tsconfig, aby obsługiwał tę funkcję ecma 6?
S ..
3
Domyśliłam się. Musiałem dodać „es7” do tablicy dla właściwości „lib” w moim pliku tsconfig.json, np. "lib": ["es7", "dom"]
S ..
120

Możesz użyć metody :

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

Możesz użyć metody find :

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

Lub możesz użyć metody indexOf :

console.log(channelArray.indexOf("three")); // 2
Nitzan Tomer
źródło
10

Jeśli Twój kod jest oparty na ES7:

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

Jeśli nie, na przykład używasz IE bez transpozycji Babel:

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

indexOfsposób powraca pozycji element ma w tablicy ze względu na to, że korzystać !==różni się od -1 gdy igła znajduje się w pierwszej pozycji.

alejoko
źródło
8

Zauważ też, że słowo kluczowe „in” nie działa na tablicach. Działa tylko na obiektach.

propName in myObject

Test włączenia tablicy jest

myArray.includes('three');
David Dehghan
źródło
2
To pułapka, o której warto wspomnieć, szczególnie jeśli pochodzisz z Python. Co gorsza, w jakiś sposób działa również na tablicach, ponieważ są one również obiektami. Po prostu nie działa w sposób, w jaki prawdopodobnie myślisz, że powinien - sprawdza, czy zamiast tego coś istnieje w tablicy jako indeks.
Cito,
5

Użyj metody JavaScript Array zawiera ()

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

Wypróbuj sam » link

Definicja

Zawiera () określa, czy tablica zawiera określony element.

Ta metoda zwraca true, jeśli tablica zawiera element, i false, jeśli nie.

Basi
źródło
1

TS ma wiele metod użyteczności dla tablic, które są dostępne za pośrednictwem prototypu tablic. Istnieje wiele, które mogą osiągnąć ten cel, ale dwie najwygodniejsze do tego celu to:

  1. Array.indexOf() Bierze dowolną wartość jako argument, a następnie zwraca pierwszy indeks, pod którym dany element można znaleźć w tablicy, lub -1, jeśli nie jest obecny.
  2. Array.includes()Bierze dowolną wartość jako argument, a następnie określa, czy tablica zawiera tę wartość. Metoda zwraca, truejeśli wartość zostanie znaleziona, w przeciwnym razie false.

Przykład:

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
źródło
1

Można użyć filterteż

this.products = array_products.filter((x) => x.Name.includes("ABC"))
Arvind Chourasiya
źródło
0

rób jak to:

departments: string[]=[];
if(this.departments.indexOf(this.departmentName.trim()) >-1 ){
            return;
    }
Abdus Salam Azad
źródło