2013-11-09 2 views
0

У меня возникли проблемы с условными обозначениями. Я хочу вернуть индекс, где шаблон начинается в строке (или -1, если не найден). Поиск должен быть чувствительным к регистру, если третий параметр является истинным, иначе он нечувствителен к регистру.Если дополнительные условия в функции в JavaScript

Examples 
index("abAB12","AB",true) returns 2 but index("abAB12","AB",false) returns 0 
index("abAB12","BA",true) returns -1 and index("abAB12","BA",false) returns 1 

Любая идея, как я могу это сделать?

Это мой код до сих пор

var s = "abAB12" 
var p = "AB" 
var cs = true 

    function index(string, pattern, caseSensitive) { 

     if (pattern) { 

      var found = false; 

      if (caseSensitive = false) { 
       if (string.indexOf(pattern.) >= 0) { 
        found = true; 
       } 
       return (found); 
       else { 
        return (""); 
       } 
      } else if (caseSensitive = true) { 
       if (string.toLowerCase().indexOf(pattern.toLowerCase()) >= 0) { 
        found = true; 
       } 
       return (found); 
      } else { 
       return (""); 
      } 
     } 

    } 

alert(index(s, p, cs)); 

Fiddle в http://jsfiddle.net/AfDFb/1/

ответ

2

У вас есть некоторый тупик в вашем коде. На 15-й строчке у вас есть

} 
return (found); 
else { 

Недействующий. Измените его на

return (found); 
} 
else { 

Существует еще один.

if (caseSensitive = false) { 

= Используется для назначения. Вы должны использовать == в операциях if при сравнении. Также на 13-й строке есть дополнительный . после рисунка. Убери это.

if (string.indexOf(pattern.) >= 0) { 

Your fiddle example

0

Вы присваиваете значение внутри, если условие вместо сравнения его.

Попробуйте

if (caseSensitive == false) { 

и

if(caseSensitive == true) 
2

Вы можете использовать string.search() с регулярным выражением для достижения этой цели в одном лайнере:

function index(input, key, caseMatters) { 
    return input.search(new RegExp(key, caseMatters ? '' : 'i')); 
} 

Теперь вы можете:

index("abAB12","AB",true); // returns 2 
index("abAB12","AB",false); // returns 0 
index("abAB12","BA",true); // returns -1 
index("abAB12","BA",false); // returns 1 
0

Вам необходимо использовать знак двойного равенства == в ваших заявлениях if, else.

if(caseSensitive == false) 

И

if(caseSensitive == true) 
0

Лучше использовать search:

'abAB12'.search(/AB/); // 2 
'abAB12'.search(/AB/i); // 0 
'abAB12'.search(/BA/); // -1 
'abAB12'.search(/BA/i); // 1 

The i средства флаг "дело i nsensitive" (i nsensible а ля Касс: D).

Смежные вопросы