繁体   English   中英

查找数字的第 n 位 JavaScript

[英]Find the nth Digit of a Number JavaScript

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

完成以两个数numnth为输入的函数,返回numnth位(从右到左数)。
笔记:
- 如果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);
  });
});

我的结果是:

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

在函数的规范中,当nth为负时,您应该返回-1 ,而不是nth

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

我相信这应该使您的测试通过,除了nth > num.length的情况,您还没有测试过。 您应该包括一个测试,其中num = 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; 
}

编辑:为了确保您的代码通过我上面描述的测试,在这种情况下使用它轻松返回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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM