一个检查数字是否包含另一个数字的最佳方法

11
例如,如果数字752包含数字5?最好的检查方法是什么?将其转换为字符串还是将其分解为单个数字?

在一个数字-字符串中查找数字...在一个数字-字符串或单个数字中查找数字 - Jaromanda X
2
我会将其转换为字符串,并对其进行正则表达式匹配:(752).toString().match(/5/) - ndugger
1
你尝试过什么吗?并且定义“最好”的含义。 - j08691
如果以上答案都无法解决问题,或者您仍然遇到困难,请告诉我,我会提供帮助。 - AmmarCSE
@AmmarCSE 谢谢,你的答案解决了它。 - user3312156
5个回答

20

转换为字符串并使用 indexOf

(752+'').indexOf('5') > -1

console.log((752+'').indexOf('5') > -1);
console.log((752+'').indexOf('9') > -1);


2
“.” 运算符的优先级高于 “+”,因此您需要使用括号才能使其正常工作。 - Pointy
2
你的运算符优先级有问题。应该是(752+'').indexOf('5'),否则''.indexOf('5')会先被计算。 - BoppreH
2
正则表达式的效率也会低一个数量级。@Nick - Liam

3

转换为字符串并使用以下选项之一:

indexOf()

(number + '').indexOf(needle) > -1;

includes():

(number + '').includes(needle);

1
你可以使用三种方法:
  1. Check it by string contains:

    var num = 752;
    num.toString().indexOf('5') > -1 //return true or false - contains or not
    
  2. Check by loop

    var f = 2;
    while(num > 0 ){
      if( num % 10 == f){
        console.log("true");
        break;
      }
      num = Math.floor(num / 10); 
    }
    
  3. Check by regular expressions

     num.toString().match(/5/) != null //return true if contains
    

0

function checkNumberIfContainsKey(number, key){
    while(number > 0){
        if(number%10 == key){
            return true;
        }
        number = Math.trunc(number / 10);        
    }
    return false;
}
console.log(
  checkNumberIfContainsKey(19, 9),   //true
  checkNumberIfContainsKey(191, 9),  //true
  checkNumberIfContainsKey(912, 9),  //true
  checkNumberIfContainsKey(185, 9)  //false
);

在所有可用答案中,由于该程序的复杂性,最有效的解决方案只需O(数字位数),如果number = 10235,则数字位数=5


0

你也可以使用 "some" 函数。 类似这样的 "some":

    function hasFive(num){
         return num.toString().split("").some(function(item){
          return item === "5";
         }); 
    }

然后您可以调用它:

   hasFive(752)

更进一步的改进是,您可以创建一个函数,该函数接受您想要检查的数字和位数:
       function hasNumber(num, digit){
             return num.toString().split("").some(function(item){
                 return item == digit;
             }); 
        }

然后以类似的方式调用它:

hasNumber(1234,3) //true
hasNumber(1244,3) //false

这样我们就可以检查任何数字的任何位数了。 希望“某个”人会发现这很有用。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接