ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของจำนวนเต็มบวก arr เป็นอาร์กิวเมนต์เดียว
ฟังก์ชันควรเรียงอาร์เรย์อินพุตอย่างที่ตัวเลขที่มีผลรวมหลักสูงสุดอยู่ก่อน ตามด้วยตัวเลขที่มีผลรวมหลักน้อยลง
ตัวอย่างเช่น หากอินพุตคือ
อินพุต
const arr = [5, 34, 1, 13, 76, 8, 78, 101, 57, 565];
เอาต์พุต
const output = [565, 78, 76, 57, 8, 34, 5, 13, 101, 1];
คำอธิบายเอาต์พุต
เพราะ 565 มีผลรวมหลักสูงสุดคือ 16 ตามด้วย 78 และ 76 ส่วน 101 และ 1 มีผลรวมหลักน้อยสุดคือ 2 และ 1 ตามลำดับ
ตัวอย่างโค้ด
const arr = [5, 34, 1, 13, 76, 8, 78, 101, 57, 565];
const addDigits = (num, sum = 0) => {
if (num) {
return addDigits(Math.floor(num / 10), sum + (num % 10));
};
return sum;
};
const sortByDigitSum = (arr = []) => {
arr.sort((a, b) => {
return addDigits(b) - addDigits(a);
});
return arr;
};
sortByDigitSum(arr);
console.log(arr);
ผลลัพธ์
[ 565, 78, 76, 57, 8, 34, 5, 13, 101, 1 ]