Як перевірити, чи містить масив рядок у TypeScript?


274

В даний час я використовую Angular 2.0. У мене є масив наступним чином:

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

Як я можу перевірити в TypeScript, чи не містить channelArray рядок "три"?


16
Це має бутиchannelArray: string[]
Nitzan Tomer


Це не специфічно для
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 ()


1
Я отримую [ts] Property 'includes' does not exist on type 'string[]'помилку, чи потрібно оновити свій tsconfig для підтримки цієї функції ecma 6?
С ..

3
Зрозумів це. Мені потрібно було додати "es7" до масиву для власності "lib" у мій файл tsconfig.json, наприклад. "lib": ["es7", "dom"]
С ..


10

Якщо ваш код базується на ES7:

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

Якщо ні, наприклад, ви використовуєте IE без трансляції вабеля:

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

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


8

Також зауважте, що ключове слово "in" не працює на масиви. Він працює лише на об'єктах.

propName in myObject

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

myArray.includes('three');

2
Цей підводний камінь варто згадати, особливо якщо ви родом з Python. Ще гірше, що якимось чином працює і на масивах, оскільки вони теж є об'єктами. Я просто не працює так, як ви, напевно, думаєте, що слід. Він перевіряє, чи існує щось в масиві як індекс.
Cito

5

Використовувати масив JavaScript включає () метод

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

Спробуйте самі » посилання

Визначення

Метод include () визначає, чи містить масив вказаний елемент.

Цей метод повертає true, якщо масив містить елемент, а false якщо ні.


1

TS має багато корисних методів для масивів, які доступні через прототип масивів. Є декілька, які можуть досягти цієї мети, але два найбільш зручні для цієї мети:

  1. Array.indexOf() Бере будь-яке значення як аргумент, а потім повертає перший індекс, в якому даний масив може бути знайдений у масиві, або -1, якщо його немає.
  2. Array.includes()Бере будь-яке значення як аргумент, а потім визначає, чи містить масив це значення. Метод, що повертається, 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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.