Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Sắp xếp số dựa trên tổng chữ số trong JavaScript

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]