Как проверить, содержит ли массив строку в TypeScript?

274

В настоящее время я использую Angular 2.0. У меня есть массив следующим образом:

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

Как я могу проверить в TypeScript, содержит ли channelArray строку 'Three'?

code1
источник
16
Должно бытьchannelArray: string[]
Ницан Томер
6
Возможный дубликат Как проверить, содержит ли массив объект в JavaScript?
Кристофер Мур
Это не
зависит от Typescript

Ответы:

523

Так же, как в JavaScript, используя Array.prototype.indexOf () :

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

Или используя ECMAScript 2016 Array.prototype.includes () :

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

Обратите внимание, что вы также можете использовать методы, показанные @Nitzan, чтобы найти строку. Однако обычно вы делаете это не для массива строк, а для массива объектов. Там эти методы были более разумными. Например

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

Ссылка

Array.find ()

Array.some ()

Array.filter ()

Baao
источник
1
Я получаю сообщение [ts] Property 'includes' does not exist on type 'string[]'об ошибке. Нужно ли обновлять tsconfig для поддержки этой функции ecma 6?
S ..
3
Догадаться. Мне нужно было добавить "es7" в массив для свойства "lib" в моем файле tsconfig.json, например. "lib": ["es7", "dom"]
S ..
120

Вы можете использовать метод some :

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

Вы можете использовать метод поиска :

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

Или вы можете использовать метод indexOf :

console.log(channelArray.indexOf("three")); // 2
Ницан Томер
источник
10

Если ваш код основан на ES7:

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

Если нет, например, вы используете IE без транспиляции Babel:

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

indexOfметод возвращает позицию элемент имеет в массив, из - за того , что мы используем !==отличается от -1 , если игла находится в первом положении.

alejoko
источник
8

Также обратите внимание, что ключевое слово «in» не работает с массивами. Работает только на объектах.

propName in myObject

Тест включения массива

myArray.includes('three');
Дэвид Дехган
источник
2
Это ловушка, которую стоит упомянуть, особенно если вы пришли из Python. Хуже того, он как-то работает и с массивами, поскольку они тоже являются объектами. Я просто не работаю так, как вы, вероятно, думаете, что должен - он проверяет, существует ли что-то в массиве как индекс.
Cito
5

Использовать метод JavaScript Array includes ()

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

Попробуй сам » ссылка

Определение

Метод includes () определяет, содержит ли массив указанный элемент.

Этот метод возвращает true, если массив содержит элемент, и false, если нет.

Basi
источник
1

У TS есть много вспомогательных методов для массивов, которые доступны через прототип массива. Есть несколько, которые могут достичь этой цели, но два наиболее удобных для этой цели:

  1. Array.indexOf() Принимает любое значение в качестве аргумента, а затем возвращает первый индекс, по которому данный элемент может быть найден в массиве, или -1, если его нет.
  2. Array.includes()Принимает любое значение в качестве аргумента и затем определяет, содержит ли массив значение this. Метод, возвращающий, trueесли значение найдено, в противном случае false.

Пример:

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

Вы filterтоже можете использовать

this.products = array_products.filter((x) => x.Name.includes("ABC"))
Арвинд Чоурасия
источник
0

делай так:

departments: string[]=[];
if(this.departments.indexOf(this.departmentName.trim()) >-1 ){
            return;
    }
Абдус Салам Азад
источник