【问题标题】:Sorting an integer's digits in descending order按降序对整数的数字进行排序
【发布时间】:2019-06-21 21:17:33
【问题描述】:

为了简单起见,假设我们有一个数字 -- 123456。我需要一个函数,将其作为输入并返回 654321,或者说 53283940,同样会返回 98543320。

我有一些东西似乎可以工作我只是不确定它是否按照最佳实践完成,似乎可以将它重新分解为更清洁的东西。这是我所拥有的,有什么帮助吗?我是新手,正在努力改进,谢谢。

function descendingOrder(a){
    let b = Array.from(a.toString()).map(Number); // map int into array
    let stringResult = b.sort().reverse().join(""); // sort in ascending, then reverse & join
    let intResult = ~~stringResult; // double bitwise operator to turn str to int
    return intResult; // return final int
}

【问题讨论】:

  • 这就是它所需要的。您将获得一些优化,但它们都做同样的事情(但更有效)。
  • 你不需要Number的映射,因为你可以按字符串排序,就像你以后做的那样。
  • @NinaScholz:好点子,谢谢。
  • 混合Number 和~~ 以两种不同的方式执行相同的操作可能会得到改进。
  • javascript 数字最大的问题是它们的大小有限。所以如果你在一些大的函数上尝试你的函数,比如1999999999999,结果会令人惊讶。

标签: javascript sorting digits


【解决方案1】:

试试这个:

const sortNumber = (a) => Number([...("" + a)].sort().reverse().join(""));

const test1 = 123456;
console.log(sortNumber(test1));

const test2 = 53283940;
console.log(sortNumber(test2));

或

const sortNumber = (a) => ~~Array.from(a.toString()).sort().reverse().join("");

const test1 = 123456;
console.log(sortNumber(test1));

const test2 = 53283940;
console.log(sortNumber(test2));

【讨论】:

  • 这会返回一个字符串,我需要它返回一个数字。否则很好的解决方案!
  • 你可以在返回值前面加上一个'+'来转换成一个int:(a) => +Array.from(a.toString()).sort().reverse().join("")
  • 我也可以用双位前缀吗? ~~
  • 是的,但要小心为一般用途截断浮点数
  • @exception-io,返回将是数字,像这样转换为 Number( [...("" + a)].sort().reverse().join("") )
猜你喜欢
  • 2021-12-28
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多