1

示例:我们有数字1122。我想检查给定的数字是否多次包含该数字1。在这种情况下,它应该返回true.

我需要代码灵活,它必须与任何数字一起使用,例如3340,56604177

4

6 回答 6

2

您可以通过调用方法或连接轻松地“强制” JS 将任何数值强制转换为字符串:toString

var someNum = 1122;
var oneCount = (someNum + '').split('1').length;

通过将数字连接到空字符串,变量被强制转换为字符串,因此您可以使用您喜欢的所有字符串方法(.match, .substring, .indexOf, ...)。
在这个例子中,我选择在每个'1'字符上拆分字符串,计算并使用结果数组的长度。如果长度 > 2,那么你就知道你需要知道什么了。

var multipleOnes = ((someNum + '').split('1').length > 2);//returns a bool, true in this case

为了回应您的评论,使其灵活-编写一个简单的函数即可:

function multipleDigit(number, digit, moreThan)
{
    moreThan = (moreThan || 1) + 1;//default more than 1 time, +1 for the length at the end
    digit = (digit !== undefined ? digit : 1).toString();
    return ((someNum + '').split(digit).length > moreThan);
}
multipleDigit(1123, 1);//returns true
multipleDigit(1123, 1, 2);//returns false
multipleDigit(223344,3);//returns 3 -> more than 1 3 in number.
于 2012-12-30T19:07:42.443 回答
1
function find(num, tofind) {
   var b = parseInt(num, 10);
   var c = parseInt(tofind, 10);
   var a = c.split("");
   var times = 0;
   for (var i = 0; i < a.length; i++) {
      if (a[i] == b) {
         times++;
      }
   }
   alert(times);
}

find('2', '1122');
于 2012-12-30T19:07:28.923 回答
1

使用javascript的match()方法。本质上,您需要做的是首先将数字转换为字符串。数字没有 RegExp 方法。之后,全局匹配数字 1 并计算结果(匹配返回一个包含所有匹配结果的数组)。

​var number = 1100;
console.log(number.toString().match(/1/g).length);​
于 2012-12-30T19:03:56.103 回答
1

将数字转换为字符串并对其进行迭代。为提高效率,一旦找到第二个数字就返回 true。

function checkDigitRepeat(number, digit) {
    var i, count = 0;

    i = Math.abs(number);
    if(isNaN(i)) {
        throw(TypeError('expected Number for number, got: ' + number));
    }
    number = i.toString();

    i = Math.abs(digit);
    if(isNaN(i)) {
        throw(TypeError('expected Number for digit, got: ' + digit));
    }
    digit = i.toString();

    if(digit > 9) {
        throw(SyntaxError('expected a digit for digit, got a sequence of digits: ' + digit));
    }

    for(i = 0; i < number.length; i += 1) {
        if(number[i] === digit) {
            count += 1;
            if(count >= 2) { return true; }
        }
    }

    return false;
}

如果您想检查一系列数字,您的解决方案可能在于使用正则表达式。

于 2012-12-30T19:28:20.687 回答
0
var myNum = '0011';

var isMultipleTimes = function(num) {
    return !!num.toString().match(/(\d)\1/g);
}

console.log(isMultipleTimes(myNum));

JavaScript匹配

于 2012-12-30T19:15:29.137 回答
0

使用@Aspiring Aqib的答案,我制作了一个实际上以我想要的方式正常工作的功能。

它的工作方式是:

示例执行:multDig('221','2')

  1. number 将(第一个参数)拆分为一个数组,其中每个元素都是一个数字。
    输出:['2','2','1']
  2. 运行一个for循环,检查每个数组元素是否与digit (第二个参数)匹配,如果匹配则增加times变量。
    输出:2
  3. 如果已经检测到匹配,请检查 for 循环内部以提高更长数字的性能,例如2211111111111111
  4. true如果多次找到该数字,则返回,否则返回false

最后是代码本身:

function multDig(number, digit){
    var finalSplit = number.toString().split(''), times = 0;
    for (i = 0; i < finalSplit.length; i++){
        if (finalSplit[i] == digit){
            times++
        }
        if (times > 1){
            return true;
        }
    }
    return false;
}
于 2013-02-18T14:49:49.343 回答