Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

กลับสตริงด้วย For Loop ใน JavaScript

โจทย์

เขียนฟังก์ชันกลับสตริง (Reverse String) โดยใช้ for loop โดยไม่ใช้ built-in methods เช่น reverse()

โค้ดตัวอย่าง

const str = 'this is the original string';

const reverseString = (str = '') => {
  let reverse = '';
  const { length: len } = str;
  
  for (let i = len - 1; i >= 0; i--) {
    reverse += str[i];
  }
  return reverse;
};

console.log(reverseString(str));

ผลลัพธ์

gnirts lanigiro eht si siht

วิธีอื่นๆ ใน JavaScript

1. Built-in Methods (สั้นที่สุด)

const reverseBuiltin = str => [...str].reverse().join('');
// หรือ
const reverseBuiltin2 = str => str.split('').reverse().join('');

2. Reduce

const reverseReduce = str => 
  [...str].reduce((rev, char) => char + rev, '');

3. Recursive

const reverseRecursive = (str) => 
  str === '' ? '' : reverseRecursive(str.slice(1)) + str[0];

4. For...of Loop

const reverseForOf = (str) => {
  let result = '';
  for (const char of str) {
    result = char + result; // Prepend
  }
  return result;
};

5. Array.from + Reverse

const reverseArrayFrom = (str) => 
  Array.from(str).reverse().join('');

ประสิทธิภาพ (Performance)

MethodTimeSpaceNote
For Loop (Index)O(n)O(n)เร็วที่สุด สำหรับสตริงยาว
For...of + PrependO(n²)*O(n)String concatenation ช้า
ReduceO(n²)*O(n)เหมือน for...of prepend
Split/Reverse/JoinO(n)O(n)Native optimized
Spread/Reverse/JoinO(n)O(n)รองรับ Unicode ดี

* String concatenation ในลูปเป็น O(n²) ควรใช้ Array.push แล้ว join

เวอร์ชัน Optimized (ใช้ Array)

const reverseOptimized = (str) => {
  const len = str.length;
  const arr = new Array(len);
  for (let i = 0; i < len; i++) {
    arr[i] = str[len - 1 - i];
  }
  return arr.join('');
};

Unicode / Emoji Support

const str = '👨‍👩‍👧‍👦 Hello 🌍';

// ❌ ผิด: แยก code units
console.log([...str].reverse().join('')); // 🌍 ??? 

// ✅ ถูกต้อง: ใช้ Array.from หรือ spread (ES6 รองรับ grapheme clusters ไม่เต็มที่)
// สำหรับ production ควรใช้ library เช่น grapheme-splitter