6

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

18

Проблема: Я использую Angular 2.0 и у меня есть массив, который выглядит следующим образом:

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

Мне нужно проверить, содержит ли массив channelArray строку 'three' с помощью TypeScript. Как это можно сделать?

5 ответ(ов)

0

Если ваш код основан на ES7 (или более поздних версиях), вы можете использовать метод includes для проверки наличия элемента в массиве:

channelArray.includes('three'); // вернёт true или false

Если же вы используете устаревший браузер, например, Internet Explorer, и не делаете транспиляцию кода с помощью Babel, вам потребуется использовать метод indexOf:

channelArray.indexOf('three') !== -1; // вернёт true или false

Метод indexOf возвращает позицию элемента в массиве, поэтому мы используем сравнение !== -1, чтобы проверить, найден ли элемент, так как если он находится на первой позиции, indexOf вернёт 0 (что не равно -1).

0

В TypeScript есть множество утилитных методов для работы с массивами, доступных через прототип массивов. Существует несколько методов, которые могут помочь в этой ситуации, но два самых удобных для данной цели:

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

Пример:

const 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'));     // true

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

0

Вы можете также использовать метод filter для этой задачи. Пример кода:

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

В данном примере мы фильтруем массив array_products, чтобы получить только те элементы, у которых свойство Name содержит подстроку "ABC".

0

Вот пример кода на TypeScript, который проверяет, содержится ли название отдела в массиве departments. Если название уже присутствует, код завершает выполнение функции:

departments: string[] = [];
if (this.departments.indexOf(this.departmentName.trim()) > -1) {
    return; // Если название отдела уже есть в массиве, выходим из функции
}

В данном коде используется метод indexOf, который возвращает индекс первого вхождения указанного значения в массиве или -1, если значение не найдено. Сначала мы обрезаем пробелы в названии отдела с помощью trim(), а затем проверяем, действительно ли оно уже присутствует в массиве departments. Если это так, функция просто возвращает управление.

0

Сегодня я столкнулся с такой ситуацией. Если вам нужно использовать метод Array.includes(), а ваша переменная или константа выглядит так:

const validNumbers: TValidNumber[] = ['one', 'two', 'three'];

Вы, скорее всего, столкнетесь с проблемой, что метод "includes" принимает в качестве параметра только тип "TValidNumber", а вы, возможно, передаете ему "string". Я не смог найти ответ за те 20 минут, что потратил на поиск, поэтому после нескольких попыток я обнаружил, что можно задать или присвоить тип для "validNumbers" как массив "TValidNumber" и массив "string" следующим образом:

const validNumbers: TValidNumber[] & string[] = ['one', 'two', 'three'];

С ненависти к TypeScript до любви к нему в одно мгновение, хехехе! Надеюсь, это поможет многим так же, как помогло мне.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь