使用sort()以降序获取数字

时间:2018-04-01 20:46:34

标签: javascript sorting

我正在尝试完成此kata。试图解决这个问题,我已经看到了thread,但我认为我正在这样做。

我做错了什么?为什么不按降序对数字进行排序? 到目前为止,这是我的代码:

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

测试通过:值== 0 测试通过:值== 1 预期:987654321,而得到:123456789

提前致谢

4 个答案:

答案 0 :(得分:2)

您需要使用空字符串''拆分字符串以获取单个数字,并使用空字符串将其连接。

使用不属于字符串的字符进行拆分会产生具有单个值的数组。后来加入的数组返回此单个元素。这就是为什么你得到与输入结果相同的值。

没有指定分隔符的

Array#join将返回带有值的逗号分隔字符串。

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

最后,您可以选择unary plus +,例如

return +newN;

获取数值。

BTW,使用parseInt,您可以指定一个基数,因为前导零的字符串可以转换为八进制数。

答案 1 :(得分:1)



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




答案 2 :(得分: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);
}

答案 3 :(得分:0)

这是一个解释性的答案

enter image description here

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
}