我正在尝试完成此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
提前致谢
答案 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)
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
}