Как бы я проверил определенную цифру в переменной?

Допустим, у меня была переменная с именем test а также test = 123456789;, Тогда у меня есть другая переменная с именем anotherTest а также anotherTest = 1234;, Как мне создать программу, которая может проверить, имеет ли переменная цифру 5 или нет? Тогда как можно отсортировать переменные по двум группам, в одной группе переменных есть цифра "5", а в другой нет? Есть ли простой способ сделать это?

4 ответа

Решение

Как мне создать программу, которая может проверить, имеет ли переменная цифру 5 или нет?

Вы можете легко сделать это с помощью строк и indexOf:

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

Тогда как можно отсортировать переменные по двум группам, в одной группе переменных есть цифра "5", а в другой нет?

Вы не можете сортировать переменные по группам, но вы, безусловно, можете сортировать значения по группам. Например, это перебирает массив и добавляет значения к with5 или же without5 массив в зависимости от того, содержит ли значение цифру 5:

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);

... назначит s значение num в виде шестнадцатеричной (основа 16) строки.

Вы можете сделать это с RegExp, или .indexOf, Либо работает:


RegEx

Все почему-то ненавидят 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) );


индекс

Это может быть быстрее в некоторых ситуациях, но не всегда, это также немного более "сложно", по крайней мере, на мой взгляд:

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/>' );

Переберите каждый символ переменной test, затем сравните, используя indexOf(), чтобы увидеть, существует ли он в anotherTest. Если так, добавьте к одному массиву, иначе добавьте к массиву 2.

Чтобы увидеть, содержит ли число цифру "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]);
    } 
});
Другие вопросы по тегам