Как бы я проверил определенную цифру в переменной?
Допустим, у меня была переменная с именем 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]);
}
});