Как проверить, является ли символ в строке конкретным символом в JS? В настоящее время у меня есть код, который проверяет каждую букву строки, а затем проходит огромный оператор if / else, чтобы проверить, какая это буква, и мне было интересно, есть ли более эффективный способ сделать это?

Примере

var string = "hello"
2
user7385995 7 Янв 2017 в 01:25

3 ответа

Лучший ответ

Есть много способов сделать это, например, вы можете иметь ряд операторов if-else или оператора switch, хотя я бы предложил другой вариант:

var str = 'hello',
        actions = { // Define actions (function to call) you want for specific characters
            h: function () {
                // Do something if character was 'h'
                console.log('h');
            },
            l: function () {
                // Do something if character was 'l'
                console.log('l');
            },
            o: function () {
                // Do something if character was 'o'
                console.log('o');
            }
        };

for (var i = 0; i < str.length; i++) {
    if (actions[str[i]]) { // If there is an action/function defined for the current character then call the function
        actions[str[i]]();
    }
}

Это вам не нужно «знать», какого персонажа вы в данный момент находитесь в цикле, только если что-то должно произойти для этого.

И для справки, достигнуть того же самого с помощью операторов if-else:

var str = 'hello';
for (var i = 0; i < str.length; i++) {
    if (str[i] === 'h') {
        // Do something if character was 'h'
        console.log('h');
    }
    else if (str[i] === 'l') {
        // Do something if character was 'l'
        console.log('l');
    }
    else if (str[i] === 'o') {
        // Do something if character was 'o'
        console.log('o');
    }
}

И с заявлением переключателя:

var str = 'hello';
for (var i = 0; i < str.length; i++) {
    switch (str[i]) {
        case 'h':
            // Do something if character was 'h'
            console.log('h');
            break;
        case 'l':
            // Do something if character was 'l'
            console.log('l');
            break;
        case 'o':
            // Do something if character was 'o'
            console.log('o');
            break;
    }
}
1
Hyddan 6 Янв 2017 в 23:37

Пример с JS

Проверьте, включает ли строка слово "world":

var str = "Hello world, welcome to the universe.";
var n = str.includes("world");

Результат n будет:

true

То же самое относится к отдельным символам в одном слове

Кредиты: http://www.w3schools.com/jsref/jsref_include.asp

1
SergioAMG 6 Янв 2017 в 22:27
function do_something(str)
{
   switch (str.substr(0,1).tolower()) {
   case 'h':
     // call function something_else with the remainder of the string
     something_else(str.substr(1,str.length));
     break;
   case 'z':
     another_thing();
     break;
   default:
     // no need to explicitly add a case for 'h' - its handled here
     break;
   }
 }

переключатель - это многопрофильная ветвь. Есть и другие способы нарезать строку. На практике вряд ли будет заметна разница в производительности между использованием оператора case по сравнению с последовательностью if...else if....else if, но это улучшает читабельность.

Некоторые языки также предоставляют конструкции, в которых вы можете определить подпрограмму для вызова во время выполнения. Это также возможно с помощью javascript , но позволяет легко совершать ошибки и затрудняет отладку / тестирование / их . В качестве примера программирования плохого приведено следующее:

function fna()
{
    ...
}
function fnb()
{
    ...
}
...
function fnz()
{
  ...
}

var fn_to_call='fn' + str.substr(0,1).tolower() + '();';
eval(fn_to_call);
0
symcbean 6 Янв 2017 в 23:29