我将如何测试变量中的某个数字?

How would I test for a certain digit in a variable?

假设我有一个名为 testtest = 123456789; 的变量。然后我有另一个名为 anotherTestanotherTest = 1234; 的变量。我将如何编写一个程序来测试变量是否具有数字 5?那么,如何将变量分为两组,一组变量中有数字“5”,另一组变量中没有?有没有简单的方法可以做到这一点?

要查看数字是否包含数字“5”,您可以将数字转换为字符串,然后在每个字符串上使用 .indexOf("5")

var test = 123456789;
var anotherTest = 1234;

// reports whether the passed in number or string contains the
// character "5"
function containsDigit5(val) {
    // convert number to string
    // if already string, then it is left as is
    val = "" + val;
    return val.indexOf("5") >= 0;
}

containsDigit5(test);           // true
containsDigit5(anotherTest);    // false

您的问题的分组部分并不完全清楚,但您可以对每个变量调用此函数并将数字添加到两个数组之一。

var testNumbers = [123456789, 1234];
var has5 = [];
var doesNotHave5 = [];

// reports whether the passed in number or string contains the
// character "5"
function containsDigit5(val) {
    // convert number to string
    // if already string, then it is left as is
    val = "" + val;
    return val.indexOf("5") >= 0;
}

testNumbers.forEach(function(item) {
    if (containsDigit5(item)) {
        has5.push(testNumbers[i]);
    } else {
        doesNotHave5.push(testNumbers[i]);
    } 
});

循环遍历变量test的每个字符,然后使用indexOf()进行比较,看它是否存在于anotherTest中。如果是,则添加到一个数组,否则添加到数组 2。

How would I make a program that can test whether a variable has the digit 5 or not?

你可以很容易地用字符串做到这一点 indexOf:

if (String(test).indexOf("5") !== -1) {
    // It has a 5 in it
}

Then, how could it sort the variables into two groups of which one group of variables has the digit "5" within it and the other without?

您无法将 变量 分组,但您当然可以将 分组。例如,这将循环遍历数组并根据值是否包含数字 5:

将值添加到 with5without5 数组

var a = [
  1234,
  12345,
  123123,
  555555
];
var with5 = [];
var without5 = [];
a.forEach(function(value) {
  if (String(value).indexOf("5") === -1) {
    without5.push(value);
  } else {
    with5.push(value);
  }
});
snippet.log("with5: " + with5.join(", "));
snippet.log("without5: " + without5.join(", "));
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>


以上假定字符串以 10 为底(十进制),但您可以使用 Number#toString(base) 轻松地对十六进制或八进制或您喜欢的任何其他底数执行相同的操作。例如:

var s = num.toString(16);

...将把 num 的值赋给 s 作为十六进制(基数 16)字符串。

您可以使用 RegExp 或 .indexOf 执行此操作。两者都有效:


正则表达式

出于某种原因,每个人都讨厌 RegExp,但我喜欢它。您可以使用:

var test = 123456789,
    anotherTest = 1234;

/5/.test(test);
/5/.test(anotherTest);

var test = 123456789,
    anotherTest = 1234;

document.write( 'test (123456789): ' + /5/.test(test) + '<br/>' );
document.write( 'anotherTest (1234): ' + /5/.test(anotherTest) );


indexOf

这在某些情况下可能会更快,但并非总是如此,它也多了一点 "complicated",至少在我看来:

var test = 123456789,
    anotherTest = 1234;

(test+'').indexOf(5) > -1;
(anotherTest+'').indexOf(5) > -1;

var test = 123456789,
    anotherTest = 1234;

document.write( 'test (123456789): ' + ((test+'').indexOf(5) > -1) + '<br/>' );
document.write( 'anotherTest (1234): ' + ((anotherTest+'').indexOf(5) > -1) + '<br/>' );