typescript - JavaScript sort() กับ localeCompare() ไม่ทำงานกับพารามิเตอร์ที่ส่งเข้าไป
นี่ค่อนข้างเป็นเรื่องยากสำหรับฉัน ฉันมีฟังก์ชันง่ายๆ นี้ที่จัดเรียงอาร์เรย์ของคอลเล็กชันตามหนึ่งในฟิลด์ของมัน
นี่คือตัวอย่างอาร์เรย์:
"countries": [
{
"id": "AW",
"name": "Aruba",
"nameeng": "Aruba",
"capital": "Oranjestad",
"currency": "AWG",
"phonecode": "297"
},
{
"id": "BM",
"name": "Bermuda",
"nameeng": "Bermuda",
"capital": "Hamilton",
"currency": "BMD",
"phonecode": "1"
},
{
"id": "GR",
"name": "Ελλάδα",
"nameeng": "Greece",
"capital": "Athens",
"currency": "EUR",
"phonecode": "30"
}];
มันดำเนินต่อไปนานกว่านี้ แต่ฉันคิดว่าคุณคงเข้าใจไอเดียแล้ว และนี่คือตัวฟังก์ชัน:
sortArray(source: any[], key) {
let result = source.sort((a, b) => {
return a[String(key)].localeCompare(b[String(key)]);
});
return result;
}
ตอนนี้มาถึงความลึกลับแล้ว ถ้าฉันเรียกใช้ฟังก์ชันแบบนี้:
countries_sorted = sortArray(countries, 'nameeng');
แล้วผลลัพธ์คือความโกลาหล องค์ประกอบของอาเรย์จะถูกส่งกลับมาในลำดับที่ดูเหมือนสุ่ม
อย่างไรก็ตาม หากฉันเขียนชื่อฟิลด์ลงไปในฟังก์ชันโดยตรงแบบนี้:
sortArray(source: any[], key) {
let key = 'nameeng';
...
}
แล้วมันก็ทำงานได้อย่างสมบูรณ์แบบ!
ฉันได้ตรวจสอบมันด้วย console.log() แล้ว พารามิเตอร์ถูกจัดการอย่างถูกต้อง ประเภทเป็น String แต่การเรียงลำดับจะไม่เกิดขึ้นถ้าฉันส่งมันเข้าไป จะเกิดขึ้นก็ต่อเมื่อฉันระบุค่าโดยตรง
Lodash ไม่ใช่วิธีแก้ปัญหาเพราะมันไม่สามารถจัดเรียงอักษรที่มีเครื่องหมายวรรณยุกต์ได้