ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของสตริงที่มีน้ำหนักพร้อมหน่วย 3 แบบ: กรัม (G), กิโลกรัม (KG) และตัน (T) ฟังก์ชันควรจัดเรียงอาร์เรย์จากน้ำหนักน้อยไปมาก
ตัวอย่าง
โค้ดตัวอย่างด้านล่าง:
const arr = ['1456G', '1KG', '.5T', '.005T', '78645G', '23KG'];
const arrangeWeights = (arr = []) => {
const sorted = (w) => {
if (w.slice(-2) === 'KG') {
return +w.slice(0, -2) * 1;
} else if (w.slice(-1) === 'T') {
return +w.slice(0, -1) * 1000;
} else {
return +w.slice(0, -1) * 0.001;
}
};
return arr.sort((a, b) => sorted(a) - sorted(b));
};
console.log(arrangeWeights(arr));
ผลลัพธ์
[ '1KG', '1456G', '.005T', '23KG', '78645G', '.5T' ]
คำอธิบายเพิ่มเติม
โค้ดแปลงทุกค่าเป็นกิโลกรัมเพื่อเปรียบเทียบ: G ÷ 1000, KG × 1, T × 1000 ควรระวังกรณีสตริงขึ้นต้นด้วยจุดทศนิยม เช่น '.5T' ซึ่ง parseFloat จัดการได้ถูกต้อง