使用sort()函数将数字按降序排列

5
我正在尝试完成这个 kata。为了理解它,我看到了这个线程,但我认为我已经按照那里所说的做了。

我做错了什么?为什么它不能按降序排列数字? 以下是我的代码:

function descendingOrder(n){
  let newN = n.toString().split(' ').sort(function(a,b){return b-a}).join();
  return parseInt(newN);
}

测试通过:Value == 0 测试通过:Value == 1 期望值:987654321,实际值:123456789

提前致谢


我建议将变量赋值拆分成几行。将每个中间步骤分配给一个变量,并打印变量的值。使用 console.log()。有关更多调试提示,请参见此博客文章 - Code-Apprentice
n.toString().split('').sort(function(a,b){return b-a}).join(''); - Ele
4个回答

6
你需要用空字符串''来分割字符串以获取单个数字,并使用空字符串将它们组合起来。
如果使用不在字符串内的字符进行分割,则结果将是一个仅含有一个值的数组。之后加入的数组将返回这个单个元素。这就是为什么你得到的结果与输入相同。
没有指定分隔符的Array#join会返回一个逗号分隔的包含这些值的字符串。
let newN = n.toString().split('').sort(function (a, b) { return b - a; }).join('');

最后,你可以使用一元正号 +,例如:

return +newN;

获取数字值的方法。

顺便提一下,使用 parseInt 函数时,你可以指定一个进制数,因为带有前导零的字符串可能会被转换成八进制数。


我以前从未见过使用“+”将其转换为数字,但似乎非常有用。谢谢。 - VisualXZ

4

这是一份详细解释

在此输入图片描述

function descendingOrder(n) {
  let result = n
    .toString() // convert numbers to string
    .split('') // split each string char in to an array of chars
    .sort((a, b) => b - a) // sort that array descending
    .join('') // regroup all items in that array into 1 string

  return parseInt(result) // turn the group of strings into an array
}

3

function descendingOrder(n){
  return +('' + n).split('').sort().reverse().join('');
}


1

像其他答案已经说明的那样,您需要使用空字符串调用split才能正确创建包含每个字符的数组。

另外,当我测试join()时,我注意到输出中有逗号(chrome 65)。我添加了一个replace函数来去除逗号,这通过了测试。

function descendingOrder(n){
  let newN = n.toString().split('').sort(function(a,b){return b-a}).join().replace(/,/g,'');
  return parseInt(newN);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接