Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một mảng số nguyên dương arr làm đối số duy nhất. Hàm phải sắp xếp mảng đầu vào sao cho số có tổng chữ số lớn nhất đứng trước, tiếp theo là các số có tổng chữ số nhỏ dần.
Ví dụ, nếu đầu vào là:
Đầu vào
const arr = [5, 34, 1, 13, 76, 8, 78, 101, 57, 565];
Đầu ra
const output = [565, 78, 76, 57, 8, 34, 5, 13, 101, 1];
Giải thích
Vì 565 có tổng chữ số cao nhất là 16, theo sau là 78 và 76, và 101 và 1 có tổng chữ số thấp nhất là 2 và 1.
Ví dụ
Dưới đây là mã thực hiện:
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);
Kết quả
[565, 78, 76, 57, 8, 34, 5, 13, 101, 1]