比较两个变量sting数组以查看是否有任何值匹配-javascript jquery

比较两个变量sting数组以查看是否有任何值匹配-javascript jquery,javascript,jquery,arrays,string,user-input,Javascript,Jquery,Arrays,String,User Input,您好,我试图比较两个数组,然后隐藏一个列表元素,如果任何值匹配 一个数组是附加到列表项的标记,另一个是用户输入 我遇到了麻烦,因为我似乎能够交叉引用一个用户输入的工作,并且无法针对多个标记获取多个单词 用户输入单词的数量可能会改变,标记的数量可能会改变。我试过inArray,但运气不好。任何帮助都将不胜感激。见下面的代码: function query_searchvar() { var searchquery=document.navsform.query.value.toLowerCa

您好,我试图比较两个数组,然后隐藏一个列表元素,如果任何值匹配

一个数组是附加到列表项的标记,另一个是用户输入

我遇到了麻烦,因为我似乎能够交叉引用一个用户输入的工作,并且无法针对多个标记获取多个单词

用户输入单词的数量可能会改变,标记的数量可能会改变。我试过inArray,但运气不好。任何帮助都将不胜感激。见下面的代码:

function query_searchvar() {
   var searchquery=document.navsform.query.value.toLowerCase();
   if (searchquery == '') {
      alert("No Text Entered");
   }
   var snospace = searchquery.replace(/\s+/g, ',');
   event.preventDefault();
   var snospacearray = snospace.split(',');

   $('li').each(function() {
      var searchtags = $(this).attr('data-searchtags');
      //alert(searchtags);
      var searcharray = searchtags.split(',');
      //alert(searcharray);
      var searchtrue=-1;

      for(var i = 0, len = searcharray.length; i < len; i++){
          if(searcharray[i] == searchquery){
              searchtrue = 0;
              break;
          }
      }
      if (searchtrue == 0) {
         $(this).show("normal");
      }
      else {
         $(this).hide("normal");
      }
   });
}
工作代码:

function query_searchvar()
{
var searchquery=document.navsform.query.value.toLowerCase();
if(searchquery == '')
{alert("No Text Entered");
}
var queryarray = searchquery.split(/,|\s+/);

event.preventDefault();


$('li').each(function() {
  var searchtags = $(this).attr('data-searchtags');
  //alert(searchtags);
  var searcharray = searchtags.split(',');
//alert(searcharray);
var found = false;
for (var i=0; i<searcharray.length; i++)
    if ($.inArray(searcharray[i], queryarray)>-1) {
        found = true;
        break;
    }

if (found == true )
  {

 $(this).show("normal");
  }
else {
$(this).hide("normal");
}
});
}
函数查询\u searchvar()
{
var searchquery=document.navsform.query.value.toLowerCase();
如果(searchquery==“”)
{警报(“未输入文本”);
}
var queryarray=searchquery.split(/,|\s+/);
event.preventDefault();
$('li')。每个(函数(){
var searchtags=$(this.attr('data-searchtags');
//警报(搜索标签);
var searcharray=searchtags.split(',');
//警报(搜索阵列);
var=false;
对于(变量i=0;i-1){
发现=真;
打破
}
if(find==true)
{
$(此).show(“正常”);
}
否则{
$(此).hide(“正常”);
}
});
}

以下是psuedo代码,可以解决您的问题

get both arrays
for each item in array 1
    for each element in array 2
        check if its equal to current element in array 1
           if its equal to then hide what you want
这方面的一个例子是

jQuery.each(array1, function(key1,val1){
    jQuery.each(array2,function(key2,val2){
        if(val1 == val2) {$(your element to hide).hide();}
    });
});

如果您有什么不明白的地方,请询问:)

以下是psuedo代码,可以解决您的问题

get both arrays
for each item in array 1
    for each element in array 2
        check if its equal to current element in array 1
           if its equal to then hide what you want
这方面的一个例子是

jQuery.each(array1, function(key1,val1){
    jQuery.each(array2,function(key2,val2){
        if(val1 == val2) {$(your element to hide).hide();}
    });
});
如果您有什么不明白的地方,请询问:)

请注意,您可以在正则表达式上拆分,因此与上面的值相等:

var queryarray = searchquery.split(/,|\s+/);

要查找两个数组中是否都包含项,请使用以下代码:

var found = searcharray.some(function(tag) {
    return queryarray.indexOf(tag) > -1;
});
虽然这只适用于ES5兼容的浏览器:-),但要支持其他浏览器,请使用

var found = false;
for (var i=0; i<searcharray.length; i++)
    if ($.inArray(searcharray[i], queryarray)>-1) {
        found = true;
        break;
    }
更快一点的算法(仅适用于真正大的阵列)是在线性遍历两个阵列之前对它们进行排序

请注意,您可以在正则表达式上拆分,因此与上面的值相等:

var queryarray = searchquery.split(/,|\s+/);

要查找两个数组中是否都包含项,请使用以下代码:

var found = searcharray.some(function(tag) {
    return queryarray.indexOf(tag) > -1;
});
虽然这只适用于ES5兼容的浏览器:-),但要支持其他浏览器,请使用

var found = false;
for (var i=0; i<searcharray.length; i++)
    if ($.inArray(searcharray[i], queryarray)>-1) {
        found = true;
        break;
    }


稍微快一点的算法(仅适用于非常大的数组)是在对两个数组进行线性排序之前对它们进行排序。

看起来您是在将一个数组与字符串进行比较,而不是两个数组。也许可以尝试添加一些控制台日志,以查找搜索标记、搜索数组和空间数组?cna你确认所有的数值都是正确的吗?尝试将if(val1!==val2)替换为!=看看这是否有帮助?我有一个问题:我可以嵌套。每个函数。所以我每人有美元(函数和内部我有另一个。每个函数。当我使用它时。隐藏它不会拾取li项。当我提醒val1和val2我没有获取数组中的元素时,我也会这样做。你认为我的数组设置错误吗。非常感谢你的帮助。这在firefox中似乎不起作用,输入框不会保存到数组中。有人愿意吗知道这是否是firefox的问题吗?看起来你是在比较一个数组和一个字符串,而不是两个数组。也许可以尝试添加一些控制台日志以查找搜索标记、搜索数组、snospace数组?和cna。如果确认所有值都正确,请尝试替换if(val1!==val2)with!=看看这是否有帮助?我有一个问题:我可以嵌套.each函数吗?所以我有$('li')。each(函数和内部我有另一个。每个函数。当我使用它时。隐藏它不会拾取li项。当我提醒val1和val2我没有获取数组中的元素时,我也会这样做。你认为我的数组设置错误吗。非常感谢你的帮助。这在firefox中似乎不起作用,输入框不会保存到数组中。有人愿意吗知道这是否是firefox的问题吗?嗨,非常感谢你的回复。我会试一试,看看是否能让它工作。非常感谢,非常有用。好的,可以。我会在它实现后用新代码更新。嗨,我没能让它工作。我想我没有正确设置数组或其他什么。query\u searchvar(){var searchquery=document.navsform.query.value.toLowerCase();if(searchquery=''{alert(“未输入文本”);}var snospace=searchquery.replace(/\s+/g',,');event.preventDefault();var snospacearray=snospace.split(',');//alert(snospacearray[1]);$('li')。每个函数({var searchtags=$(this).attr('data-searchtags'));//警报(searchtags);var searcharray=searchtags.split(',);jQuery.each(snospacearray,函数(key1,val1){jQuery.each(searcharray,函数(key2,val2){if(val1!==val2){$(this.hide('slow');}});}你能编辑你的问题以包含此代码吗?因为它在此处不可读嗨,非常感谢你的回答。我会尝试一下,看看是否能让它工作。非常感谢,非常有帮助。好的,可以。我会在实现后用新代码更新。嗨,我没能让它工作。我想我没有设置数组正确地或其他什么。query_searchvar(){var searchquery=document.navsform.query.value.toLowerCase();if(searchquery=''{alert(“未输入文本”);}var snospace=searchquery.replace(/\s+/g',”);event.preventDefault();var snospacearray=snospace.split(',');//alert(snospacearray[1]);$('li')。每个函数({var searchtags=$)(这个).attr('data-searchtags');//警报(searchtags);var searcharray=searchtags.split(',');jQuery.each(snospacearray,函数(key1,val1){jQuery.each(searcharray,函数(key2,val2){if(val1!==val2){$(this.hide('slow');}});}你能编辑你的问题以包含此代码吗?因为此处无法读取。唯一的问题是数组长度可以不同,因此一个可能比另一个更长。当然可以。代码将搜索所有项目,直到找到一个。谢谢它工作,非常感谢。我仍然不确定这是如何工作的。如果我有searcharray.length,这是参考值吗错误t