Làm cách nào để kiểm tra xem một mảng có chứa một chuỗi trong TypeScript không?


274

Hiện tại tôi đang sử dụng Angular 2.0. Tôi có một mảng như sau:

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

Làm cách nào tôi có thể kiểm tra TypeScript xem channelArray có chứa chuỗi 'ba' không?


16
Nó nên làchannelArray: string[]
Nitzan Tomer


Đây không phải là bản mô tả cụ thể
myfashiolahoma

Câu trả lời:


523

Giống như trong JavaScript, sử dụng Array.prototype.indexOf () :

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

Hoặc sử dụng ECMAScript 2016 Array.prototype.includes () :

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

Lưu ý rằng bạn cũng có thể sử dụng các phương thức như được hiển thị bởi @Nitzan để tìm chuỗi. Tuy nhiên, bạn thường không làm điều đó cho một mảng chuỗi, mà là cho một mảng các đối tượng. Có những phương pháp hợp lý hơn. Ví dụ

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

Tài liệu tham khảo

Array.find ()

Mảng.some ()

Array.filter ()


1
Tôi gặp [ts] Property 'includes' does not exist on type 'string[]'lỗi, tôi có cần cập nhật tsconfig để hỗ trợ tính năng ecma 6 này không?
S ..

3
Tìm ra. Tôi cần thêm "es7" vào mảng cho thuộc tính "lib" trong tệp tsconfig.json của mình, vd. "lib": ["es7", "dom"]
S ..


10

Nếu mã của bạn dựa trên ES7:

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

Nếu không, ví dụ bạn đang sử dụng IE không có transpile babel:

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

các indexOfphương pháp sẽ trở lại vị trí nguyên tố này có thành mảng, vì lý do đó chúng tôi sử dụng !==khác nhau từ -1 nếu kim được tìm thấy ở vị trí đầu tiên.


8

Cũng lưu ý rằng từ khóa "trong" không hoạt động trên mảng. Nó chỉ hoạt động trên các đối tượng.

propName in myObject

Kiểm tra bao gồm mảng là

myArray.includes('three');

2
Đó là một cạm bẫy đáng nói, đặc biệt nếu bạn đến từ Python. Thậm chí tệ hơn, nó bằng cách nào đó cũng hoạt động trên các mảng vì chúng cũng là đối tượng. Tôi chỉ không làm việc theo cách mà bạn có thể nghĩ nó nên - nó kiểm tra xem có thứ gì đó tồn tại trong mảng dưới dạng chỉ mục hay không.
Cito

5

Sử dụng JavaScript Array bao gồm () Phương thức

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

Tự mình thử » liên kết

Định nghĩa

Phương thức include () xác định xem một mảng có chứa phần tử đã chỉ định hay không.

Phương thức này trả về true nếu mảng chứa phần tử và false nếu không.


1

TS có nhiều phương thức tiện ích cho các mảng có sẵn thông qua nguyên mẫu của Mảng. Có nhiều mục có thể đạt được mục tiêu này nhưng hai cách thuận tiện nhất cho mục đích này là:

  1. Array.indexOf() Lấy bất kỳ giá trị nào làm đối số và sau đó trả về chỉ mục đầu tiên có thể tìm thấy một phần tử đã cho trong mảng hoặc -1 nếu không có.
  2. Array.includes()Lấy bất kỳ giá trị nào làm đối số và sau đó xác định xem một mảng có bao gồm giá trị này hay không. Phương thức trả về truenếu giá trị được tìm thấy, nếu không false.

Thí dụ:

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

Bạn có thể sử dụng filterquá

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

0

làm như thế này:

departments: string[]=[];
if(this.departments.indexOf(this.departmentName.trim()) >-1 ){
            return;
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.