ฉันจะตรวจสอบว่าอาร์เรย์มีสตริงใน TypeScript ได้อย่างไร


274

ขณะนี้ฉันกำลังใช้ Angular 2.0 ฉันมีอาร์เรย์ดังนี้

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

ฉันจะตรวจสอบใน TypeScript ว่า channelArray มีสตริง 'สาม' ได้อย่างไร


16
มันควรจะเป็นchannelArray: string[]
Nitzan Tomer


นี่ไม่ใช่ตัวพิมพ์ที่เฉพาะเจาะจง
myfashionhub

คำตอบ:


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 กับไม่มี babel transpile:

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

indexOfวิธีการจะกลับมาตำแหน่งองค์ประกอบที่มีเข้าแถวเพราะการที่เราใช้!==แตกต่างจาก -1 ถ้าเข็มจะพบได้ที่ตำแหน่งแรก


8

นอกจากนี้โปรดทราบว่าคำหลัก "ใน" ไม่ทำงานในอาร์เรย์ มันทำงานกับวัตถุเท่านั้น

propName in myObject

การทดสอบรวมอาเรย์คือ

myArray.includes('three');

2
นั่นเป็นข้อผิดพลาดที่ควรค่าแก่การพูดถึงโดยเฉพาะถ้าคุณมาจาก Python ยิ่งไปกว่านั้นมันยังทำงานได้ดีในอาร์เรย์เช่นกันเนื่องจากเป็นวัตถุด้วย ฉันไม่ทำงานในแบบที่คุณอาจคิดว่ามันควร - ตรวจสอบว่ามีบางสิ่งบางอย่างในอาร์เรย์เป็นดัชนีแทน
Cito

5

ใช้วิธีการรวม JavaScript ()วิธีการ

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

ลองลิงค์ด้วยตัวเอง»

คำนิยาม

การรวม ()วิธีการกำหนดว่าอาร์เรย์มีองค์ประกอบที่ระบุ

วิธีการนี้จะส่งกลับจริงถ้าอาร์เรย์มีองค์ประกอบและเท็จถ้าไม่


1

TS มีวิธีการยูทิลิตี้มากมายสำหรับอาร์เรย์ที่มีอยู่ผ่านทางต้นแบบของอาร์เรย์ มีหลายอย่างที่สามารถบรรลุเป้าหมายนี้ได้ แต่สิ่งที่สะดวกที่สุดสำหรับวัตถุประสงค์นี้คือ:

  1. Array.indexOf() รับค่าใด ๆ เป็นอาร์กิวเมนต์แล้วส่งกลับดัชนีแรกที่องค์ประกอบที่กำหนดสามารถพบได้ในอาร์เรย์หรือ -1 ถ้าไม่มีอยู่
  2. Array.includes()รับค่าใด ๆ เป็นอาร์กิวเมนต์แล้วพิจารณาว่าอาร์เรย์มีค่านี้หรือไม่ วิธีการที่จะกลับถ้าค่าที่พบมิฉะนั้นtruefalse

ตัวอย่าง:

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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.