ค้นหาเว็บไซต์

การใช้ TypeScript วนลูปผ่านสตริงพร้อมดัชนีและค่า


ฉันต้องการวนลูปผ่านสตริงและฉันต้องการมีทั้งดัชนีและตัวอักษรที่ดัชนีนี้ ฉันรู้ว่าฉันสามารถใช้วนลูป for ธรรมดาได้สำหรับเรื่องนี้ แต่ฉันคิดว่าบางฟีเจอร์ใหม่ของ Javascript/Typescript อาจดูเรียบง่ายกว่า ดังนั้นฉันจึงลองแบบนี้:

for (const [i, character] of Object.entries('Hello Stackoverflow')) {
    console.log(i);
    console.log(typeof(i));
    console.log(character);
}

น่าทึ่งที่ว่านี่ใช้ได้ อย่างไรก็ตามแม้ว่า i จะนับขึ้น แต่ก็เป็นสตริง ดังนั้นตัวอย่างเช่น นี่จะไม่ทำงาน:

'other string'.charAt(i)

ฉันยังใหม่กับ Typescript ดังนั้นคำถามของฉันคือ:

  • ทำไม i ถึงเป็นสตริงและไม่ใช่ตัวเลข?
  • มีวิธีที่ง่ายขึ้นหรือสวยงามขึ้นในการทำสิ่งนี้หรือไม่?

คำตอบ #1

วิธีที่ปลอดภัยสำหรับยูนิโคดคือการแยกเป็นตัวอักษรโดยใช้ไวยากรณ์การกระจาย:

const chars = [...text];

แล้วคุณทำการวนซ้ำโดยใช้ Array.prototype.forEach ที่ดีแบบเก่า

chars.forEach((c, i) => console.log(c, i));

คำตอบ #2

ทำไม i ถึงเป็นสตริงและไม่ใช่ตัวเลข?

เพราะว่า Object.entries() จะส่งค่าคู่คีย์-ค่าและมีวัตถุประสงค์ให้ใช้กับอ็อบเจ็กต์ ซึ่งคีย์แน่นอนว่าจะต้องเป็นสตริง

มีวิธีที่ง่ายขึ้นหรือสวยงามขึ้นในการทำสิ่งนี้หรือไม่?

เพียงแค่ลูป for แบบง่าย ๆ พร้อมกับ charAt(i) ก็สามารถทำได้:

const text = 'Hello StackOverflow';
for (let i = 0; i < text.length; i++) {
  const character = text.charAt(i);
  console.log(i, character);
}

บทความที่เกี่ยวข้อง