Come posso verificare se un array contiene una stringa in TypeScript?


274

Attualmente sto usando Angular 2.0. Ho un array come segue:

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

Come posso verificare in TypeScript se channelArray contiene una stringa "tre"?


16
Dovrebbe esserechannelArray: string[]
Nitzan Tomer,


Questo non è specifico di Typescript
myfashionhub il

Risposte:


523

Lo stesso di JavaScript, usando Array.prototype.indexOf () :

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

O usando ECMAScript 2016 Array.prototype.includes () :

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

Nota che puoi anche usare metodi come mostrato da @Nitzan per trovare una stringa. Tuttavia di solito non lo faresti per un array di stringhe, ma piuttosto per un array di oggetti. Lì quei metodi erano più sensati. Per esempio

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

Riferimento

Array.find ()

Array.some ()

Array.filter ()


1
[ts] Property 'includes' does not exist on type 'string[]'Viene visualizzato un errore, devo aggiornare tsconfig per supportare questa funzione di ecma 6?
S ..

3
Capito. Avevo bisogno di aggiungere "es7" nell'array per la proprietà "lib" nel mio file tsconfig.json, ad es. "lib": ["es7", "dom"]
S ..

120

Puoi usare un metodo :

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

Puoi usare il metodo find :

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

Oppure puoi usare il metodo indexOf :

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

10

Se il tuo codice è basato su ES7:

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

In caso contrario, ad esempio stai usando IE senza transpile babel:

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

il indexOfmetodo restituirà la posizione dell'elemento nell'array, per questo usiamo !==diverso da -1 se l'ago viene trovato nella prima posizione.


8

Si noti inoltre che la parola chiave "in" non funziona sugli array. Funziona solo su oggetti.

propName in myObject

Il test di inclusione dell'array è

myArray.includes('three');

2
È una trappola degna di nota, soprattutto se vieni da Python. Ancora peggio, funziona in qualche modo anche su array poiché sono anche oggetti. Semplicemente non lavoro nel modo in cui probabilmente pensi che dovrebbe - controlla invece se esiste qualcosa nell'array come indice.
Cito,

5

Usa il metodo Array JavaScript include ()

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

Provalo tu stesso » link

Definizione

Il metodo Includes () determina se una matrice contiene un elemento specificato.

Questo metodo restituisce true se l'array contiene l'elemento e false in caso contrario.


1

TS ha molti metodi di utilità per gli array che sono disponibili tramite il prototipo degli array. Ci sono molti che possono raggiungere questo obiettivo, ma i due più convenienti per questo scopo sono:

  1. Array.indexOf() Prende qualsiasi valore come argomento e quindi restituisce il primo indice in cui è possibile trovare un determinato elemento nella matrice o -1 se non è presente.
  2. Array.includes()Prende qualsiasi valore come argomento e quindi determina se un array include questo valore. Il metodo restituito truese viene trovato il valore, altrimenti false.

Esempio:

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

Puoi filteranche usare

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

0

fare così:

departments: string[]=[];
if(this.departments.indexOf(this.departmentName.trim()) >-1 ){
            return;
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.