Como verifico se uma matriz contém uma sequência no TypeScript?

274

Atualmente estou usando o Angular 2.0. Eu tenho uma matriz da seguinte maneira:

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

Como posso verificar no TypeScript se o channelArray contém uma string 'três'?

code1
fonte
16
Deveria serchannelArray: string[]
Nitzan Tomer
6
Possível duplicata de Como verifico se uma matriz inclui um objeto em JavaScript?
Christopher Moore
Isso não é específico do
texto datilografado

Respostas:

523

O mesmo que no JavaScript, usando Array.prototype.indexOf () :

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

Ou usando o ECMAScript 2016 Array.prototype.includes () :

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

Observe que você também pode usar métodos como o mostrado por @Nitzan para encontrar uma string. No entanto, você normalmente não faria isso para uma matriz de strings, mas para uma matriz de objetos. Lá esses métodos foram mais sensatos. Por exemplo

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

Referência

Array.find ()

Array.some ()

Array.filter ()

baao
fonte
1
Eu recebo um [ts] Property 'includes' does not exist on type 'string[]'erro, preciso atualizar meu tsconfig para suportar esse recurso do ecma 6?
S ..
3
Descobri isso. Eu precisava adicionar "es7" na matriz para a propriedade "lib" no meu arquivo tsconfig.json, por exemplo. "lib": ["es7", "dom"]
S ..
120

Você pode usar o método some :

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

Você pode usar o método find :

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

Ou você pode usar o método indexOf :

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

Se o seu código for baseado no ES7:

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

Caso contrário, por exemplo, você está usando o IE sem transpile babel:

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

o indexOfmétodo retornará a posição que o elemento tem na matriz, por isso usamos !==diferente de -1 se a agulha for encontrada na primeira posição.

alejoko
fonte
8

Observe também que a palavra-chave "in" não funciona em matrizes. Funciona apenas em objetos.

propName in myObject

O teste de inclusão da matriz é

myArray.includes('three');
David Dehghan
fonte
2
É uma armadilha que vale a pena mencionar, principalmente se você é do Python. Pior ainda, de alguma forma funciona em matrizes, já que elas também são objetos. Eu simplesmente não funciona da maneira que você provavelmente acha que deveria - ele verifica se existe algo na matriz como índice.
Cito
5

Usar a matriz JavaScript includes () Método

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

Experimente você mesmo » link

Definição

O método includes () determina se uma matriz contém um elemento especificado.

Este método retorna true se a matriz contém o elemento e false se não.

Basi
fonte
1

O TS possui muitos métodos utilitários para matrizes disponíveis através do protótipo de matrizes. Existem vários que podem atingir esse objetivo, mas os dois mais convenientes para esse fim são:

  1. Array.indexOf() Aceita qualquer valor como argumento e, em seguida, retorna o primeiro índice no qual um determinado elemento pode ser encontrado na matriz ou -1 se não estiver presente.
  2. Array.includes()Aceita qualquer valor como argumento e, em seguida, determina se uma matriz inclui esse valor. O método retornando truese o valor for encontrado, caso contrário false.

Exemplo:

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
fonte
1

Você pode usar filtertambém

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

faça assim:

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