2013-11-14 2 views
-1

Есть несколько, если условия выполнения замены строк со строкой КАП:Как уменьшить мультипликатор, если условия в одном сокращенном состоянии в JavaScript

var nameList = $('#name').text(); 

if(nameList.indexOf('SAM') > -1){ 
    var newName = nameList.replace(/SAM/g, 'KAP'); 
    $('#name').html(newName); 
} 

if(nameList.indexOf('PAT') > -1){ 
    var newName = nameList.replace(/PAT/g, 'KAP'); 
    $('#name').html(newName); 
} 

Как можно выше два быть сжата в одно, если условие использования jquery/javascript, если у нас есть новые имена, уже присутствующие в массиве, как показано ниже:

var nameArray = ['SAM', 'PAT', 'DAB'];

такой, что, если какое-либо из вышеперечисленного найдено в nameList, никакое другое условие не будет проверено.

+0

Если у вас есть массив имен, почему бы не перебрать по массиву и попробовать по очереди? –

ответ

1
var nameList = $('#name').text(); 

var nameArray = ['SAM','PAT','DAB']; 
nameArray.some(function(name) { 
    if (!!~nameList.indexOf(name)) { 
     nameList.replace(new RegExp(name, 'gi'), 'KAP'); 
     return true; 
    } 
    return false; 
}); 

Метод Array.some выполняет итерации по элементам массива, пока функция не вернет true. Оформить заказ Mozilla Developers documentation

!! ~ представляет собой комбинацию операндов, которая делает только -1 ложной.

0

В своей основе я хотел бы предложить:

var nameArray = ['SAM','PAT','DAB'], 
    reg = new RegExp('(' + nameArray.join('|') + ')', 'i'), 
if (reg.test(nameList)) { 
    // one of those names was found 
} 
else { 
    // none of those names were found 
} 

Simplified JS Fiddle demo.

0

Здесь вы идете:

JS Fiddle:http://jsfiddle.net/2F4dG/2/

HTML

<div id="name">Hi my name is Sam. Sam is cool.</div> 

КОД

$(function(){ 
    var nameList = $('#name').text() 

    var nameArray = ['SAM','PAT','DAB']; 

    //loop through all possible names 
    for(var i=0;i<nameArray.length;i++){ 
     if(nameList.toUpperCase().indexOf(nameArray[i])!=-1){ 
      //new regex out of name we are replacing... 
      var re = new RegExp(nameArray[i],"gi"); 
      //replacae all matches 
      var newName = nameList.replace(re,"KAP"); 
      //set new name 
      $('#name').html(newName); 
      //exit loop we found our match... 
      break; 
     } 
    } 
}); 

ВЫХОД

Hi my name is KAP. KAP is cool.

0

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

var nameArray = ['SAM','PAT','DAB'];// your list of words 
var nameList = $('#name').text();// your string to check 
var reg = new RegExp(nameArray.join('|'),"g");// create the regex object - reg == /SAM|PAT|DAB/g 
$('#name').html(nameList.replace(reg,'KAP')); 

FIDDLE

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