น้ำหนักของตัวเลขคือผลรวมของเลขหลัก ต้องจัดเรียงอาร์เรย์ตัวเลขตามน้ำหนักจากน้อยไปมาก หากน้ำหนักเท่ากัน เรียงตามค่าจริงจากน้อยไปมาก
ตัวอย่าง: 50 (น้ำหนัก 5) และ 23 (น้ำหนัก 5) → 23 จะอยู่ก่อน 50
ตัวอย่างโค้ด
const arr = [2, 1, 100, 56, 78, 3, 66, 99, 200, 46];
const calculateWeight = (num, sum = 0) => {
if (num) { return calculateWeight(Math.floor(num / 10), sum + (num % 10)); }
return sum;
};
const sorter = (a, b) => calculateWeight(a) - calculateWeight(b) || a - b;
arr.sort(sorter);
console.log(arr);
ผลลัพธ์
ค่าที่แสดงในคอนโซลจะเป็นดังนี้:
[ 1, 100, 2, 200, 3, 46, 56, 66, 78, 99 ]