¿Cómo verifico si una matriz contiene una cadena en TypeScript?


274

Actualmente estoy usando Angular 2.0. Tengo una matriz de la siguiente manera:

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

¿Cómo puedo verificar en TypeScript si channelArray contiene una cadena 'tres'?


16
Debería serchannelArray: string[]
Nitzan Tomer


Esto no es específico de
Typecript

Respuestas:


523

Lo mismo que en JavaScript, usando Array.prototype.indexOf () :

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

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

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

Tenga en cuenta que también puede usar métodos como los mostrados por @Nitzan para encontrar una cadena. Sin embargo, normalmente no lo haría para una matriz de cadenas, sino para una matriz de objetos. Allí esos métodos fueron más sensatos. Por ejemplo

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

Referencia

Array.find ()

Array.some ()

Array.filter ()


1
Recibo un [ts] Property 'includes' does not exist on type 'string[]'error, ¿necesito actualizar mi tsconfig para admitir esta función ecma 6?
S ..

3
Lo averigué. Necesitaba agregar "es7" en la matriz para la propiedad "lib" en mi archivo tsconfig.json, por ejemplo. "lib": ["es7", "dom"]
S ..


10

Si su código está basado en ES7:

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

Si no es así, por ejemplo, está utilizando IE sin transpilar babel:

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

el indexOfmétodo devolverá la posición que el elemento tiene en la matriz, por eso usamos !==diferente de -1 si la aguja se encuentra en la primera posición.


8

También tenga en cuenta que la palabra clave "in" no funciona en matrices. Funciona solo en objetos.

propName in myObject

La prueba de inclusión de matriz es

myArray.includes('three');

2
Es una trampa que vale la pena mencionar, especialmente si vienes de Python. Peor aún, de alguna manera también funciona en matrices, ya que también son objetos. Simplemente no funciona de la manera que probablemente pienses que debería: comprueba si hay algo en la matriz como índice.
Cito

5

Usar el método de matriz de JavaScript incluye ()

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

Pruébelo usted mismo » enlace

Definición

El método incluye () determina si una matriz contiene un elemento especificado.

Este método devuelve verdadero si la matriz contiene el elemento y falso si no.


1

TS tiene muchos métodos de utilidad para matrices que están disponibles a través del prototipo de matrices. Hay varios que pueden lograr este objetivo, pero los dos más convenientes para este propósito son:

  1. Array.indexOf() Toma cualquier valor como argumento y luego devuelve el primer índice en el que se puede encontrar un elemento dado en la matriz, o -1 si no está presente.
  2. Array.includes()Toma cualquier valor como argumento y luego determina si una matriz incluye este valor. El método devuelve truesi se encuentra el valor, de lo contrario false.

Ejemplo:

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

Se puede utilizar filtertambién

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

0

hazlo así:

departments: string[]=[];
if(this.departments.indexOf(this.departmentName.trim()) >-1 ){
            return;
    }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.