[英]Find the nth Digit of a Number JavaScript
我真的以为我能够找到解决我的问题的方法,但我认为我看得越多就越看不到。 这是我的作业:
完成以两个数
num
和nth
为输入的函数,返回num
的nth
位(从右到左数)。
笔记:
- 如果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;
}
输入是:
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);
});
});
我的结果是:
NaN
在函数的规范中,当nth
为负时,您应该返回-1
,而不是nth
。
对于NaN
失败的测试,这是因为您抓住了-
并将其视为数字。 您应该使用Math.abs()
将输入转换为正值,这将消除符号。
我相信这应该使您的测试通过,除了nth
> num.length
的情况,您还没有测试过。 您应该包括一个测试,其中num = 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;
}
编辑:为了确保您的代码通过我上面描述的测试,在这种情况下使用它轻松返回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;
}
所以第一步是确保在将数字转换为字符串时删除负号,因为说明中说我们可以将它们视为正号,而负号将在我们遍历每个字符时占据一个字符位置。
下一步是当 nth <= 0 时,我们应该返回 -1,因为说明明确告诉我们
如果
nth
不是正数,则返回 -1。
结果函数如下所示:
var findDigit = function(num, nth) {
if (nth <= 0) {
return -1;
}
let change = num.toString().replace('-', '');
let find = (change.charAt(change.length - nth) * 1);
return find;
}
我已将您的要求翻译成代码并添加了您的测试用例:
// Write a function that takes two numbers as input, num and nth function findDigit(num, nth) { // If nth is not positive, return -1 if (nth <= 0) { return -1; } else { // If num is negative, ignore its sign and treat it as a positive value let str = Math.abs(num).toString(); // Keep in mind that 42 = 00042. This means that findDigit(42, 5) would return 0 if (nth > str.length) { return 0; } else { // Return the nth digit of num (counting from right to left) return str.charAt(str.length - nth); } } } // Test cases console.log(findDigit(5673, 4) == 5); console.log(findDigit(129, 2) == 2); console.log(findDigit(-2825, 3) == 8); console.log(findDigit(-456, 4) == 0); console.log(findDigit(0, 20) == 0); console.log(findDigit(65, 0) == -1); console.log(findDigit(24, -8) == -1);
我想你的功能会更好,测试结果是这样的:
var findDigit = function(num, nth) {
let change = num.toString();
let val = change.charAt(change.length - nth);
if (!(val >= 0)) {
val = 0;
}
let find = val * 1;
if (nth <= 0) {
return -1;
}
return find;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.