Javascript 如何为字符串数组实现.indexof?

Javascript 如何为字符串数组实现.indexof?,javascript,jquery,arrays,string-matching,Javascript,Jquery,Arrays,String Matching,如何简化下面的代码?我如何摆脱if语句?我想突出显示ajax响应中的一些行。现在我有两个字符串要比较=两个if。这个数字会增加,所以我考虑用另一种方法来实现——使用一个字符串数组,如果字符串是data_数组元素的一部分,则需要突出显示该字符串 我更喜欢只使用javascript的解决方案,但jQuery也可以 data_array=data.split('<BR>'); for(var i=0, len=data_array.length; i < len; i

如何简化下面的代码?我如何摆脱if语句?我想突出显示ajax响应中的一些行。现在我有两个字符串要比较=两个if。这个数字会增加,所以我考虑用另一种方法来实现——使用一个字符串数组,如果字符串是data_数组元素的一部分,则需要突出显示该字符串

我更喜欢只使用javascript的解决方案,但jQuery也可以

    data_array=data.split('<BR>');
    for(var i=0, len=data_array.length; i < len; i++){
        if (data_array[i].indexOf('Conflict discovered') >= 0){
            data_array[i]="<span class='red'>"+data_array[i]+"</span>";
        }   
        if (data_array[i].indexOf('Syntax error') >= 0){
            data_array[i]="<span class='red'>"+data_array[i]+"</span>";
        }   
    }
    data=data_array.join('<BR>');
data\u array=data.split(“
”); 对于(变量i=0,len=data_array.length;i=0){ 数据_数组[i]=“”+数据_数组[i]+“”; } if(数据数组[i].indexOf('Syntax error')>=0){ 数据_数组[i]=“”+数据_数组[i]+“”; } } data=data_array.join(“
”);
data\u array=data.split(“
”); 对于(变量i=0,len=data_array.length;i=0 | | dai.indexOf('Syntax error')>=0){ 数据_数组[i]=“dai+”; } } data=data_array.join(“
”);
为什么不为循环添加另一个

data_array=data.split('<BR>');

var stringsToFind = ['Conflict discovered', 'Syntax error'];

for (var i = 0; i < data_array.length; i++) {

    for (var j = 0; j < stringsToFind.length; j++) {

        var currItem = data_array[i];

        if (currItem.indexOf(stringsToFind[j]) >= 0) {

            data_array[i]='<span class="red">' + currItem + '</span>';
        }
    }  
}

data = data_array.join('<BR>');
data\u array=data.split(“
”); var stringsToFind=['discovered','Syntax error']; 对于(变量i=0;i=0){ 数据_数组[i]=''+当前项+''; } } } data=data_array.join(“
”);
jQuery(注意,可能会慢一些,我还没有测试过这个)

data\u array=data.split(“
”); var stringsToFind=['discovered','Syntax error']; $.each(数据数组、函数(i、项){ $.each(stringsToFind,函数(j,s){ 如果(项目索引f>=0){ 数据_数组[i]=''+项+''; } } }); data=data_array.join(“
”);
var data_array=data.split(“
”); var errMsgs=['discovered','Syntax error']; data\u array=data\u array.map(函数(data\u rec){ var isan错误=errMsgs.some(函数(errMsg){ 返回数据\u rec.indexOf(errMsg)>=0; }); 如果(ISAN错误){ 返回“+数据记录+”; }否则{ 返回数据记录; } });
var-highlightWords=['discovered','Syntax error','Simply cool'];

对于(i=0;i根据需要向数组中添加更多元素:)

数据。替换(/
/ig,“\n”)。替换( 新的RegExp('^(.*(?:'+[ “发现冲突” ,“语法错误” ].join(“|”)+”).*)$,“gm”) 替换(/\n/g,
);
说明:

  • 用换行符替换

    标记
  • 创建一个regexp:
    ^(.*(:发现冲突|语法错误)。$
  • ..
  • 换行符折回到

    标记中

@Ibu,你就是我们不能拥有美好事物的原因。@Ibu javascript=browser.jQuery=32KB@ibu-jquery!=javascript。“但是jquery也可以”意味着使用jquery方法的解决方案是可以接受的(是:-),但是如果我修改了一个数组,而不是引入新的
(如果
?我有一个配置文件,我希望这样的数组包含在其中。@Radek,check out.map和.forEachIn除此之外,我会使用jQuery.each,这是一种更好的迭代形式。@Anderson Silva:True,但是如果Radek不需要jQuery库,这将是纯javascript解决方案。你能给你的答案添加
。每个
的样本,这样我就接受它吗?@Radek检查我的答案,它不使用任何循环,但我最喜欢你的答案。抱歉@Laurence。您的代码仅突出显示(错误)字符串。挖掘从

定义的整行。不过我喜欢。我学到了一些新东西。我也非常喜欢你的解决方案。实际上,它可能比@cwolves'更容易阅读。@Radek谢谢!我很高兴你帮了我的忙+1我甚至不知道一些
。这是一个非常好的解决方案,@Insidei0us
some()
是一个非常新的解决方案,请参见这里的JS等价物:哦,但你应该注意,这是IE9和所有现代浏览器,根据这
是否会跨越一个数组中的文本或

之间的全部文本?是的,这是需要的。:-)但我自己无法从代码中找到答案。所以我问。是的,这就是
^(.*..*)$
的目的,为了匹配整条线路,为什么必须用新线替换
?我想我可以用变量名替换['Conflict discovered'],不是吗?因为
^
$
与行首和行尾匹配。如果没有它,我将需要使正则表达式过于复杂,以查找

标记之间的整行。是的,您可以用变量替换
[…]
。是的,这是“一条线”,如果这很重要的话
data_array=data.split('<BR>');

var stringsToFind = ['Conflict discovered', 'Syntax error'];

for (var i = 0; i < data_array.length; i++) {

    for (var j = 0; j < stringsToFind.length; j++) {

        var currItem = data_array[i];

        if (currItem.indexOf(stringsToFind[j]) >= 0) {

            data_array[i]='<span class="red">' + currItem + '</span>';
        }
    }  
}

data = data_array.join('<BR>');
data_array=data.split('<BR>');

var stringsToFind = ['Conflict discovered', 'Syntax error'];

$.each(data_array, function(i, item) {
    $.each(stringsToFind, function(j, s) {
        if (item.indexOf(s) >= 0) {
            data_array[i]='<span class="red">' + item + '</span>';
        }
    }
});

data = data_array.join('<BR>');
var data_array = data.split('<BR>');
var errMsgs = ['Conflict discovered', 'Syntax error'];
data_array = data_array.map(function(data_rec) {
    var isAnError = errMsgs.some(function (errMsg) {
        return data_rec.indexOf(errMsg) >= 0;
    });
    if (isAnError) {
        return "<span class='red'>" + data_rec + '</span>';
    } else {
        return data_rec;
    }
});
var highlightWords = ['Conflict discovered', 'Syntax error', 'Simply cool'];

for(i=0; i<highlightWords.length; i++){
  var regex = new RegExp(highlightWords[i],'ig');
  data= data.replace( regex, '<span class="red">'+ highlightWords[i] +'</span>');
}

$('div').html( data );
var words = ['Conflict discovered', 'Syntax error', 'Strange'];
var data_array=data.split('<BR>');

for(n=0;n<words.length;n++){
  for(i=0; i<data_array.length; i++){
      if (data_array[i].indexOf( words[n] ) >= 0){
           data_array[i]="<span class='red'>"+data_array[i]+"</span>";
      }   
  }
  data = data_array.join('<BR>');
}

$('div').html( data );
data.replace( /<br>/ig, '\n' ).replace(
    new RegExp( '^(.*(?:' + [
          'Conflict discovered'
        , 'Syntax error'
    ].join( '|' ) + ').*)$', 'gm' )
, '<span class="red">$1</span>' ).replace( /\n/g, '<br>' );