查找数字的第 n 位 JavaScript

Coc*_*ade 0 javascript

我真的以为我能够找到解决我的问题的方法,但我认为我看的越多,我看到的就越少。这是我的作业:

完成这需要两个数字作为输入功能,numnth和返回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)

我的结果是:

  • 测试通过:值 == 5
  • 测试通过:值 == 2
  • 测试通过:值 == 8
  • 预期:0,而是得到: NaN
  • 测试通过:值 == 0
  • 预期:-1,而是得到:0
  • 预期:-1,反而得到:-8

小智 5

在函数的规范中,你应该返回-1whennth是负数,而不是nth

对于以 失败的测试NaN,这是因为您正在抓取-并将其视为数字。您应该使用 将输入转换为正值Math.abs(),这将消除符号。

我相信这应该会让你的测试通过,除了nth>num.length没有测试的情况。你应该包括一个测试 wherenum = 42nth = 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)