如何按最后一位对数组进行排序?

how to sort array by last digit?

我需要编写一个函数来接收数字数组和 应该 return 排序的数组用于比较他们的最后一位,如果他们的最后一位相同,你应该检查倒数第二个,依此类推。

示例:

输入:[1, 10, 20, 33, 13, 60, 92, 100, 21]

输出:[100、10、20、60、1、21、92、13、33]

但我明白了

输出:[10、20、60、100、1、21、92、33、13]

我的代码:

/**I guess the input numbers are only integers*/
input = [1, 10, 20, 33, 13, 60, 92, 100, 21];

const reverseString = (string) => {
  const stringToArray = string.split("");
  const reversedArray = stringToArray.reverse();
  const reversedString = reversedArray.join("");
  return reversedString;
};

let sortedInput = input.sort((firstNumber, secondNumber) => {
  const firstNumberReversed = reverseString(firstNumber.toString());
  const secondNumberReversed = reverseString(secondNumber.toString());
  const largerOne = Math.max(
    firstNumberReversed,
    secondNumberReversed
  ).toString;

  for (let i = 0; i < largerOne.length; i++) {
    if (firstNumberReversed[i] != secondNumberReversed[i]) {
        if(firstNumberReversed[i] > secondNumberReversed[i]){
            return 1
        }
        if(secondNumberReversed[i] > firstNumberReversed[i]){
            return -1
        }
    }
  }
});

console.log(sortedInput);

您可以使用 Remainder Operator:

演示:

const data = [1, 10, 20, 33, 13, 60, 92, 100, 21];

data.sort((a, b) => {
  for (let i = 1, sum = a + b; ; i *= 10) {
    const diff = (a % i) - (b % i);
    if (diff === 0 && i < sum) continue;
    return diff;
  }
});

console.log(data);

如果你sort it after reversing这个数字

你可以达到这个结果

const arr = [1, 10, 20, 33, 13, 60, 92, 100, 21];

const result = arr
  .map((n) => [n, n.toString().split("").reverse().join("")])
  .sort((a, b) => a[1].localeCompare(b[1]))
  .map((a) => a[0]);

console.log(result);