Πώς μπορώ να ελέγξω αν ένας πίνακας περιέχει μια συμβολοσειρά στην TypeScript;

Προς το παρόν χρησιμοποιώ το Angular 2.0. Έχω έναν πίνακα ως εξής:

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

Πώς μπορώ να ελέγξω στο TypeScript αν η συστοιχία channelArray περιέχει μια συμβολοσειρά 'three';;

Λύση

Το ίδιο όπως στη 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()

Σχόλια (2)

Μπορείτε να χρησιμοποιήσετε την κάποια μέθοδο:

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

Μπορείτε να χρησιμοποιήσετε τη μέθοδο find:

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

Ή μπορείτε να χρησιμοποιήσετε τη μέθοδο indexOf:

console.log(channelArray.indexOf("three")); // 2
Σχόλια (0)

Αν ο κώδικάς σας βασίζεται στο ES7:

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

Αν όχι, για παράδειγμα χρησιμοποιείτε τον IE χωρίς babel transpile:

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

η μέθοδος indexOf θα επιστρέψει τη θέση που έχει το στοιχείο στον πίνακα, εξαιτίας αυτού χρησιμοποιούμε !== διαφορετικό από το -1 αν η βελόνα βρίσκεται στην πρώτη θέση.

Σχόλια (0)