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'?


16
Deveria serchannelArray: string[]
Nitzan Tomer


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


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

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.


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

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.


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

1

Você pode usar filtertambém

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

0

faça assim:

departments: string[]=[];
if(this.departments.indexOf(this.departmentName.trim()) >-1 ){
            return;
    }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.