บทความนี้สาธิตวิธีจัดเรียงอาร์เรย์ของออบเจกต์ โดยให้ออบเจกต์ที่มีค่า value เป็น falsy (false, null, undefined, 0, "") อยู่ด้านล่างสุด และออบเจกต์ที่มีค่า value เป็นตัวเลขจริงจะถูกเรียงจากมากไปน้อย
ตัวอย่างข้อมูล
const array = [
{key: 'a', value: false},
{key: 'a', value: 100},
{key: 'a', value: null},
{key: 'a', value: 23}
];
ตัวอย่างโค้ด
const arr = [
{key: 'a', value: false},
{key: 'a', value: 100},
{key: 'a', value: null},
{key: 'a', value: 23}
];
const isValFalsy = (obj) => !obj.value && typeof obj.value !== 'number';
const sortFalsy = arr => {
arr.sort((a, b) => {
if (isValFalsy(a) && isValFalsy(b)) {
return 0;
}
if (isValFalsy(a)) {
return 1;
}
if (isValFalsy(b)) {
return -1;
}
return b.value - a.value;
});
};
sortFalsy(arr);
console.log(arr);
ผลลัพธ์
[
{ key: 'a', value: 100 },
{ key: 'a', value: 23 },
{ key: 'a', value: false },
{ key: 'a', value: null }
]
คำอธิบาย
ฟังก์ชัน isValFalsy ตรวจสอบว่า value เป็น falsy และไม่ใช่ตัวเลข (เพื่อไม่ให้ 0 ถูกนับเป็น falsy)
ในการ sort: falsy ทั้งคู่ = 0, a เป็น falsy = 1 (ย้ายไปหลัง), b เป็น falsy = -1 (ย้ายไปหน้า), มิฉะนั้นเรียงตามค่า value จากมากไปน้อย (b.value - a.value)