Comment vérifier si un tableau contient une chaîne en TypeScript?

274

Actuellement, j'utilise Angular 2.0. J'ai un tableau comme suit:

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

Comment puis-je vérifier dans TypeScript si le channelArray contient une chaîne «trois»?

code1
la source
16
Cela devrait êtrechannelArray: string[]
Nitzan Tomer
Ce n'est pas spécifique à
Typuscript

Réponses:

523

Identique à JavaScript, en utilisant Array.prototype.indexOf () :

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

Ou en utilisant ECMAScript 2016 Array.prototype.includes () :

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

Notez que vous pouvez également utiliser des méthodes telles que celles montrées par @Nitzan pour trouver une chaîne. Cependant, vous ne feriez généralement pas cela pour un tableau de chaînes, mais plutôt pour un tableau d'objets. Là, ces méthodes étaient plus sensées. Par exemple

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

Référence

Array.find ()

Array.some ()

Array.filter ()

baao
la source
1
Je reçois une [ts] Property 'includes' does not exist on type 'string[]'erreur, dois-je mettre à jour mon tsconfig pour prendre en charge cette fonctionnalité ecma 6?
S ..
3
Deviner. J'avais besoin d'ajouter "es7" dans le tableau pour la propriété "lib" dans mon fichier tsconfig.json, par exemple. "lib": ["es7", "dom"]
S ..
120

Vous pouvez utiliser la méthode some :

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

Vous pouvez utiliser la méthode find :

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

Ou vous pouvez utiliser la méthode indexOf :

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

Si votre code est basé sur ES7:

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

Sinon, par exemple, vous utilisez IE sans transbile babel:

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

la indexOfméthode retournera la position de l'élément dans le tableau, à cause de cela, nous utilisons !==différent de -1 si l'aiguille se trouve à la première position.

alejoko
la source
8

Notez également que le mot clé "in" ne fonctionne pas sur les tableaux. Cela fonctionne uniquement sur les objets.

propName in myObject

Le test d'inclusion de tableau est

myArray.includes('three');
David Dehghan
la source
2
C'est un piège qui mérite d'être mentionné, surtout si vous venez de Python. Pire encore, cela fonctionne également sur les tableaux car ils sont également des objets. Je ne fonctionne tout simplement pas comme vous le pensez probablement - il vérifie si quelque chose existe dans le tableau en tant qu'index à la place.
Cito
5

Utiliser la matrice JavaScript inclut la méthode ()

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

Essayez-le vous-même » lien

Définition

La méthode includes () détermine si un tableau contient un élément spécifié.

Cette méthode renvoie true si le tableau contient l'élément et false sinon.

Basi
la source
1

TS a de nombreuses méthodes utilitaires pour les tableaux qui sont disponibles via le prototype des tableaux. Il y en a plusieurs qui peuvent atteindre cet objectif, mais les deux plus pratiques à cet effet sont:

  1. Array.indexOf() Prend n'importe quelle valeur comme argument, puis retourne le premier index auquel un élément donné peut être trouvé dans le tableau, ou -1 s'il n'est pas présent.
  2. Array.includes()Prend n'importe quelle valeur comme argument, puis détermine si un tableau inclut une cette valeur. La méthode retourne truesi la valeur est trouvée, sinon false.

Exemple:

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
la source
1

Vous pouvez filteraussi utiliser

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

fait comme ça:

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