Bagaimana cara memeriksa apakah array berisi string di TypeScript?

274

Saat ini saya menggunakan Angular 2.0. Saya memiliki array sebagai berikut:

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

Bagaimana saya bisa mengecek dalam TypeScript apakah channelArray berisi string 'tiga'?

kode1
sumber
16
SeharusnyachannelArray: string[]
Nitzan Tomer
Ini bukan spesifik-jenis
huruf

Jawaban:

523

Sama seperti di JavaScript, menggunakan Array.prototype.indexOf () :

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

Atau menggunakan ECMAScript 2016 Array.prototype.includes () :

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

Perhatikan bahwa Anda juga bisa menggunakan metode seperti yang ditunjukkan oleh @Nitzan untuk menemukan string. Namun Anda biasanya tidak akan melakukannya untuk array string, melainkan untuk array objek. Di sana metode-metode itu lebih masuk akal. Sebagai contoh

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

Referensi

Array.find ()

Array.some ()

Array.filter ()

baao
sumber
1
Saya mendapatkan [ts] Property 'includes' does not exist on type 'string[]'kesalahan, apakah saya perlu memperbarui tsconfig saya untuk mendukung fitur ecma 6 ini?
S ..
3
Menemukannya. Saya perlu menambahkan "es7" ke dalam array untuk properti "lib" di file tsconfig.json saya, mis. "lib": ["es7", "dom"]
S ..
120

Anda dapat menggunakan beberapa metode :

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

Anda dapat menggunakan metode temukan :

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

Atau Anda dapat menggunakan metode indexOf :

console.log(channelArray.indexOf("three")); // 2
Nitzan Tomer
sumber
10

Jika kode Anda berbasis ES7:

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

Jika tidak, misalnya Anda menggunakan IE tanpa transpile babel:

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

yang indexOfmetode akan mengembalikan posisi elemen memiliki ke dalam array, karena yang kita gunakan !==berbeda dari -1 jika jarum ditemukan di posisi pertama.

alejoko
sumber
8

Perhatikan juga bahwa kata kunci "in" tidak berfungsi pada array. Ini bekerja hanya pada objek.

propName in myObject

Tes inklusi array adalah

myArray.includes('three');
David Dehghan
sumber
2
Itu jebakan yang layak disebutkan, terutama jika Anda berasal dari Python. Lebih buruk lagi, itu entah bagaimana berfungsi pada array juga karena mereka adalah objek juga. Saya hanya tidak bekerja dengan cara yang Anda pikir seharusnya - memeriksa apakah ada sesuatu dalam array sebagai indeks sebagai gantinya.
Cito
5

Gunakan JavaScript Array meliputi () Metode

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

Coba tautan " Coba Sendiri»

Definisi

Metode include () menentukan apakah array berisi elemen yang ditentukan.

Metode ini mengembalikan true jika array berisi elemen, dan false jika tidak.

Basi
sumber
1

TS memiliki banyak metode utilitas untuk array yang tersedia melalui prototipe Array. Ada beberapa yang dapat mencapai tujuan ini tetapi dua yang paling nyaman untuk tujuan ini adalah:

  1. Array.indexOf() Mengambil nilai apa pun sebagai argumen dan kemudian mengembalikan indeks pertama di mana elemen yang diberikan dapat ditemukan dalam array, atau -1 jika tidak ada.
  2. Array.includes()Mengambil nilai apa pun sebagai argumen dan kemudian menentukan apakah array menyertakan nilai ini. Metode mengembalikan truejika nilai ditemukan, jika tidak false.

Contoh:

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
Willem van der Veen
sumber
1

Anda bisa menggunakannya filterjuga

this.products = array_products.filter((x) => x.Name.includes("ABC"))
Arvind Chourasiya
sumber
0

lakukan seperti ini:

departments: string[]=[];
if(this.departments.indexOf(this.departmentName.trim()) >-1 ){
            return;
    }
Abdus Salam Azad
sumber