我创建的Javascript |递归函数返回未定义的结果以及正确的答案

我创建的Javascript |递归函数返回未定义的结果以及正确的答案,javascript,Javascript,当我运行下面的递归函数时,它返回“CLundefined”,这里“CL”是正确的答案。据我所知,我已经定义了所有变量。问题是什么 var roman = { M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1 }; function convertToRoman(num) { for (var

当我运行下面的递归函数时,它返回“CLundefined”,这里“CL”是正确的答案。据我所知,我已经定义了所有变量。问题是什么

var roman = {
  M: 1000,
  CM: 900,
  D: 500,
  CD: 400,
  C: 100,
  XC: 90,
  L: 50,
  XL: 40,
  X: 10,
  IX: 9,
  V: 5,
  IV: 4,
  I: 1
};


function convertToRoman(num) {
  for (var key in roman) {
    var check = num >= roman[key];
    console.log(key);
    if (check) {
        return key + convertToRoman( num -= roman[key])
  }
}
}

convertToRoman(150);

最后,
check
false
,因此
if()
块不会运行。因此,缺省返回作为函数return提供——您猜,缺省值是,
undefined


最好在函数中使用一个局部变量(在for循环之外),然后返回该变量。

最终
检查
是否为
false
,以便
if()
块不会运行。因此,缺省返回作为函数return提供——您猜,缺省值是,
undefined

最好在函数中使用局部变量(在for循环之外),然后返回该变量。

在本例中,您缺少了
num==0
。这是为了停止递归循环

varroman={M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1};
函数转换器(num){
如果(num==0)返回“”;
for(罗马字母的var键){
if(num>=roman[key])返回key+convertToRoman(num-=roman[key]);
}
}
控制台日志(Convertoroman(150))在本例中,您缺少了
num==0
。这是为了停止递归循环

varroman={M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1};
函数转换器(num){
如果(num==0)返回“”;
for(罗马字母的var键){
if(num>=roman[key])返回key+convertToRoman(num-=roman[key]);
}
}

控制台.日志(转换器阿曼(150))只是为了咯咯笑,但是任何想要迭代示例的人:

const-ROMAN={
M:1000,
厘米:900,
D:500,
CD:400,
C:100,
XC:90,
L:50,
XL:40,
X:10,
IX:9,
五:五,,
四:4,,
I:1
};
设x=Object.keys(ROMAN.reverse();
设y=Object.values(ROMAN.reverse();
函数toRoman(n){
n=(n |=0)<0?-n:n;
如果(n==0)返回null;
让我们“”;
而(n!==0){
设i=((n>=y[y.length-1]&&y.length)||
y、 findIndex(m=>m>n))-1;
s+=x[i];
n-=y[i];
}
返回s;
}
console.log([
0, -11, 100, 103, 234, 1928, 9832, 221, -23.3, 10.1, -0.3

].地图(托罗曼)只是为了咯咯笑,但是任何想要迭代示例的人:

const-ROMAN={
M:1000,
厘米:900,
D:500,
CD:400,
C:100,
XC:90,
L:50,
XL:40,
X:10,
IX:9,
五:五,,
四:4,,
I:1
};
设x=Object.keys(ROMAN.reverse();
设y=Object.values(ROMAN.reverse();
函数toRoman(n){
n=(n |=0)<0?-n:n;
如果(n==0)返回null;
让我们“”;
而(n!==0){
设i=((n>=y[y.length-1]&&y.length)||
y、 findIndex(m=>m>n))-1;
s+=x[i];
n-=y[i];
}
返回s;
}
console.log([
0, -11, 100, 103, 234, 1928, 9832, 221, -23.3, 10.1, -0.3
].地图(托罗曼)