我真的以为我能够找到解决我的问题的方法,但我认为我看的越多,我看到的就越少。这是我的作业:
完成这需要两个数字作为输入功能,
num并nth和返回nth的数字num(从右计数到左)。
注意:
- 如果num是负数,忽略其符号并将其视为正值
- 如果nth不是正数,则返回 -1
- 记住 42 = 00042。这意味着findDigit(42, 5) 将返回 0
代码:
var findDigit = function(num, nth) {
let change = num.toString();
let find = (change.charAt(change.length - nth) * 1);
if (nth <= 0){
return nth;
}
return find;
}
Run Code Online (Sandbox Code Playgroud)
输入是:
describe("Test", function() {
it("Examples", function(){
Test.assertEquals(findDigit(5673, 4), 5);
Test.assertEquals(findDigit(129, 2), 2);
Test.assertEquals(findDigit(-2825, 3), 8);
Test.assertEquals(findDigit(-456, 4), 0);
Test.assertEquals(findDigit(0, 20), 0);
Test.assertEquals(findDigit(65, 0), -1);
Test.assertEquals(findDigit(24, -8), -1);
});
});
Run Code Online (Sandbox Code Playgroud)
我的结果是:
NaN小智 5
在函数的规范中,你应该返回-1whennth是负数,而不是nth。
对于以 失败的测试NaN,这是因为您正在抓取-并将其视为数字。您应该使用 将输入转换为正值Math.abs(),这将消除符号。
我相信这应该会让你的测试通过,除了nth>num.length没有测试的情况。你应该包括一个测试 wherenum = 42和nth = 5。
var findDigit = function(num, nth){
if (nth <= 0){
return -1;
}
let change = Math.abs(num).toString();
let find = (change.charAt(change.length - nth) * 1);
// I suspect this will fail when nth is larger than the length
return find;
}
Run Code Online (Sandbox Code Playgroud)
编辑:为了确保您的代码通过我上面描述的测试,0在这种情况下使用它可以轻松返回:
var findDigit = function(num, nth) {
if (nth <= 0) {
return -1;
}
let change = Math.abs(num).toString();
if (change.length < nth)
return 0;
let find = (change.charAt(change.length - nth) * 1);
return find;
}
Run Code Online (Sandbox Code Playgroud)