Javascript js函数中的toString返回未定义的0值

Javascript js函数中的toString返回未定义的0值,javascript,undefined,tostring,Javascript,Undefined,Tostring,我为Codewars测试编写了一个函数: 您的任务是生成一个可以接受任何非负整数的函数 作为参数,并按降序返回其数字。 降序意味着您取最高数字并放置 紧跟其后的下一个最高数字 以下是我的功能: 但是没有用 第二个问题: 有一个输出值0正在通过我的函数输入 在发布这篇文章之前,我问了一些问题。任何关于Codewars挑战的对我的逻辑的评论或批评都是非常受欢迎的。提前谢谢你的帮助。像这样的事吗 函数下降顺序(n){ 控制台日志(n); //将数字转换为字符串 var toStr=n.toStr

我为Codewars测试编写了一个函数:

您的任务是生成一个可以接受任何非负整数的函数 作为参数,并按降序返回其数字。 降序意味着您取最高数字并放置 紧跟其后的下一个最高数字

以下是我的功能:

但是没有用


第二个问题: 有一个输出值0正在通过我的函数输入

在发布这篇文章之前,我问了一些问题。任何关于Codewars挑战的对我的逻辑的评论或批评都是非常受欢迎的。提前谢谢你的帮助。

像这样的事吗

函数下降顺序(n){
控制台日志(n);
//将数字转换为字符串
var toStr=n.toString();
//将字符串拆分为数组
strArray=toStr.split(“”);
变量t=strArray.indexOf('.')+1;
//获取十进制数字
var newStr=横向拼接(t);
//按降序排列值
newStr=newStr.sort().reverse();
var sortedNo=strArray.splice(0,t).concat(newStr).join(“”);
//打印排序后的值
控制台日志(sortedNo);
}
下降顺序(1.45312798)

函数下降顺序(n){
控制台日志(n);
//将数字转换为字符串
var toStr=n.toString();
//将字符串拆分为数组
strArray=toStr.split(“”);
变量t=strArray.indexOf('.')+1;
//获取十进制数字
var newStr=横向拼接(t);
//按降序排列值
newStr=newStr.sort().reverse();
var sortedNo=strArray.splice(0,t).concat(newStr).join(“”);
//打印排序后的值
控制台日志(sortedNo);
}

下降顺序(1.45312798)此函数完成所有操作:

function result(n) {
    var digs=[];
    if (n.toString().indexOf('.')>-1) {
        var m=n.toString().slice(0,n.toString().indexOf('.'));
    } else {
        var m=n.toString();
    }
    for (var i=0;i<m.length;i++) {
        digs.push(parseInt(m[i]));
    }
    return parseInt(digs.sort().reverse().join(''));
}
console.log(result(16435.43)) // 65431
console.log(result(16433153)) // 65433311
函数结果(n){
var-digs=[];
if(n.toString().indexOf('.')>-1){
var m=n.toString().slice(0,n.toString().indexOf('.');
}否则{
var m=n.toString();
}

对于(var i=0;i此函数执行所有操作:

function result(n) {
    var digs=[];
    if (n.toString().indexOf('.')>-1) {
        var m=n.toString().slice(0,n.toString().indexOf('.'));
    } else {
        var m=n.toString();
    }
    for (var i=0;i<m.length;i++) {
        digs.push(parseInt(m[i]));
    }
    return parseInt(digs.sort().reverse().join(''));
}
console.log(result(16435.43)) // 65431
console.log(result(16433153)) // 65433311
函数结果(n){
var-digs=[];
if(n.toString().indexOf('.')>-1){
var m=n.toString().slice(0,n.toString().indexOf('.');
}否则{
var m=n.toString();
}

对于(var i=0;i不是问题的答案,但我认为它可以短得多。您说的是非负整数,但在代码中使用了
1.45312798
,因此我使用了您的示例值。只使用整数不需要太多(短得多)

var n=1.45312798;
函数sortNumb(n){
var p=n.toString().split(“.”);
var s=(p[1])?“+p[1].拆分(“”).sort().reverse().join(“”):;
控制台日志(p[0]+s);
}

sortNumb(n);
不是问题的答案,但我认为它可以短得多。你说的是非负整数,但在你的代码中使用了
1.45312798
,所以我使用了你的示例值。只使用一个整数(短得多)不需要太多

var n=1.45312798;
函数sortNumb(n){
var p=n.toString().split(“.”);
var s=(p[1])?“+p[1].拆分(“”).sort().reverse().join(“”):;
控制台日志(p[0]+s);
}

sortNumb(n);
两个带有一些ES6的紧凑版本

//a utility
var sortNumericDecending = (a,b) => b-a;

//simple version that works with positive ints
function descendingOrder(n){
    return +String(n).split("").sort(sortNumericDecending).join("");
}

//takes floats and orders the decimal places
function descendingOrder(n){
    var [int, decimals] = String(+n).split(".");
    return decimals? 
        +(int + "." + decimals.split("").sort(sortNumericDecending).join("")):
        n;
}

//or the same without Array destructuring
function descendingOrder(n){
    var parts = String(+n).split(".");
    return parts.length > 1? 
        +(parts[0] + "." + parts[1].split("").sort(sortNumericDecending).join("")):
        n;
}

除了你的问题,你想要哪一个已经不清楚了。

两个带有一些ES6的紧凑版本

//a utility
var sortNumericDecending = (a,b) => b-a;

//simple version that works with positive ints
function descendingOrder(n){
    return +String(n).split("").sort(sortNumericDecending).join("");
}

//takes floats and orders the decimal places
function descendingOrder(n){
    var [int, decimals] = String(+n).split(".");
    return decimals? 
        +(int + "." + decimals.split("").sort(sortNumericDecending).join("")):
        n;
}

//or the same without Array destructuring
function descendingOrder(n){
    var parts = String(+n).split(".");
    return parts.length > 1? 
        +(parts[0] + "." + parts[1].split("").sort(sortNumericDecending).join("")):
        n;
}


除了您的问题之外,还不清楚您想要哪一个。

我没有收到该错误。在将“n”转换为字符串之前,请检查该值是空的还是空的。如果它是未定义的/null,则会抛出错误。当输入到控制台时,它也不会抛出错误,它来自Codewars输出。抱歉,我应该指定。但它仍然返回错误控制台中我的未定义值。您没有传递整数。为什么要在小数点处拆分此字符串?此函数的参数必须是“非负整数”我没有收到该错误。在将“n”转换为字符串之前,请检查该值是否为空或null。如果它是未定义的/null,则会引发错误。输入控制台时,它也不会引发错误,因为它来自Codewars输出。很抱歉,我应该指定。但它仍然会在控制台中为我返回未定义的值。您没有传递整数。为什么是否在小数点处拆分此字符串?此函数的参数必须是“非负整数”这段代码很好,但它需要取一个十进制值:/n您说的是“非负整数”是问题吗?我没有。我可能没有正确理解问题。我对你的答案投了赞成票。不管怎样,我添加了一个编辑,新代码应该适用于十进制值。代码很棒,但它需要一个十进制值:/你说的是“非负整数”是问题吗?我没有,也许我没有正确理解这个问题。我给你的答案投了赞成票。无论如何,我添加了一个编辑,新代码应该适用于十进制值。伟大的解决方案@Pugazh非常优雅整洁!使用
切片
而不是
拼接
,或者至少,如果你使用第一个
拼接
,你不需要第二个。如果您更改它:
var t=strArray.indexOf('.'))+1 | | strArray.length;
它与intsgreat solution@Pugazh保持一致非常优雅整洁!使用
切片
而不是
拼接
,或者至少,如果使用第一个
拼接
则不需要第二个。如果更改此选项:
var t=strArray.indexOf('.)+1 | | strArray.length;
它与intsGreat bit of code@Tigger保持一致!在编写高效javascript时,你必须创造性地思考,这真是太神奇了!更多的学习!伟大的代码@Tigger!在编写高效javascript时,你必须创造性地思考,这真是太神奇了!更多的学习!