jQuery - 在数组中搜索类似的元素

时间:2016-05-11 11:00:27

标签: javascript jquery arrays

我正在尝试在数组中搜索类似的元素。例如,如果在我的数组中我有Sarah, sara, sarah之类的名称元素,并在输入字段中输入并搜索sara,结果应该会给我所有类似的结果。

这是fiddle但是,它只是查找正确的元素,并且不区分大小写。

如何处理此问题以便进行不区分大小写的搜索,例如sql search LIKE %...%;

到目前为止我已经

$("#SearchBtn").click(function() {

  var searchInput = $("#SearchInput").val();

  if (searchInput == "") {

    alert("Search field is empty");

  } else {

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

      if ((array[i][0] == searchInput) || (array[i][1] == searchInput) || (array[i][2] == searchInput) || (array[i][3] == searchInput) || (array[i][4] == searchInput)) {

        alert(array[i]);

      }

    }

  }

});

6 个答案:

答案 0 :(得分:3)

对于不区分大小写的部分,您可以在输入字符串和搜索字符串上使用toLowerCase。

之后,您可以使用indexOf查找输入字符串是否与搜索模式“相似”。

然而,字符串之间的相似性可能会更复杂一些。例如,您可以认为“sora”类似于“sara”,而“sarasara”则不是......

在这种情况下,您需要Hamming distance或类似的距离函数和相似度阈值。

此外,toLowerCase可能不适用于全球化,您必须考虑toLocalLowerCase

看看这个小提琴中的简单版本:

var array = [
  ["Andrew", "London", "Male", "waiter", "single"],
  ["John", "rome", "Male", "designer", "Married"],
  ["Sarah", "new York", "Female", "broker", "single"],
  ["Annah", "UK", "Female", "waiter", "maRRied"],
  ["sara", "Tokio", "Female", "Waiter", "single"],
  ["John", "Naples", "male", "Chef", "married"]
];

//Search Box

$("#SearchBtn").click(function() {

  var searchInput = $("#SearchInput").val().toLowerCase();

  if (searchInput == "") {

    alert("Search field is empty");

  } else {

    for (var i = 0; i < array.length; i++) {
      if ((array[i][0].toLowerCase().indexOf(searchInput) >= 0) 
      ||(array[i][1].toLowerCase().indexOf(searchInput) >= 0)
      ||(array[i][2].toLowerCase().indexOf(searchInput) >= 0)
      ||(array[i][3].toLowerCase().indexOf(searchInput) >= 0)
      ||(array[i][4].toLowerCase().indexOf(searchInput) >= 0)) {

				alert (array[i]);

      } 

    }

  }

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="custom-search-form" class="form form-inline navbar-form ">
  <div class="input-group">

    <input id="SearchInput" type="text" name="mapSearch" value="" placeholder="Key Search" class="form-control">
    <span class="input-group-btn">
                    <button id="SearchBtn" type="button" class="btn btn-info" style="height:25px;">Search</button>
                </span>

  </div>

答案 1 :(得分:1)

在这里使用 toLowerCase()

if ((array[i][0] == searchInput)

答案 2 :(得分:0)

您可以在此处查看:https://jsfiddle.net/u7gkt2Lc/

var array = [
  ["Andrew", "London", "Male", "waiter", "single"],
  ["John", "rome", "Male", "designer", "Married"],
  ["Sarah", "new York", "Female", "broker", "single"],
  ["Annah", "UK", "Female", "waiter", "maRRied"],
  ["sara", "Tokio", "Female", "Waiter", "single"],
  ["John", "Naples", "male", "Chef", "married"]
];

//Search Box

$("#SearchBtn").click(function() {

  var searchInput = $("#SearchInput").val();

  if (searchInput == "") {

    alert("Search field is empty");

  } else {



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

      for(var j = 0; j <= 4 ; j++ ) {
      if (array[i][j].toLowerCase().indexOf(searchInput.toLowerCase()) >= 0) {
        alert (array[i][j]);
      }
      }

    }

  }

});

答案 3 :(得分:0)

如上所述,您可以使用toLowerCase()函数将所有内容都设为小写。确保您同时创建数组中的元素以及input.val()小写。

当您完成此操作后,您只需使用indexOf函数,该函数搜索数组并返回索引。

然后我们知道,如果索引大于-1(因为0是第一个索引),那么必须有匹配。

你可以使用类似的东西:

   if(array[i][0].indexOf(searchInput) > -1) {
        alert('There's a match!')
   }

希望有所帮助。

答案 4 :(得分:0)

您可以使用.toLowerCase()来比较区分大小写。

var array = [
   ["Andrew", "London", "Male", "waiter", "single"],
   ["John", "rome", "Male", "designer", "Married"],
   ["Sarah", "new York", "Female", "broker", "single"],
   ["Annah", "UK", "Female", "waiter", "maRRied"],
   ["sara", "Tokio", "Female", "Waiter", "single"],
   ["John", "Naples", "male", "Chef", "married"]
];
//Search Box
$("#SearchBtn").click(function() {
   var searchInput = $("#SearchInput").val();
   if (searchInput == "") {
      alert("Search field is empty");
   } 
	else {
      array.map(function(d) {
         d.map(function(e) {
            if (searchInput.toLowerCase() == e.toLowerCase()) {
               alert(e);
            }
         })
      })
   }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="custom-search-form" class="form form-inline navbar-form ">
   <div class="input-group">

      <input id="SearchInput" type="text" name="mapSearch" value="" placeholder="Key Search" class="form-control">
      <span class="input-group-btn">
                    <button id="SearchBtn" type="button" class="btn btn-info" style="height:25px;">Search</button>
                </span>

   </div>

答案 5 :(得分:0)

search方法执行搜索正则表达式与此String对象之间的匹配。 使用以下不区分大小写的RegExp进行比较:

var oRegExp = new RegExp(/John/i);
var sArrayElement = "john"
sArrayElement.search(oRegExp);