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

jQuery - Search for similar elements in array

本文关键字:元素 搜索 数组 jQuery-      更新时间:2023-09-26

我正试图在数组中搜索类似的元素。例如,如果在我的数组中我有像Sarah, sara, sarah这样的name元素,并且在输入字段中我键入并搜索sara,那么结果应该会给我所有类似的结果。

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

如何做到这一点,以便进行不区分大小写的搜索和sql搜索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]);
      }
    }
  }
});

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

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

然而,字符串之间的相似性可能会稍微复杂一些。例如,你可以认为"sora"类似于"sara",而"sarasara"不是。。。

在这种情况下,您需要汉明距离或类似的距离函数和相似性阈值。

此外,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>

在此处使用toLowerCase()

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

您可以在此处查看: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]);
      }
      }
    }
  }
});

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

完成后,您可以简单地使用indexOf函数,该函数搜索数组并返回索引。

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

你可以使用类似的东西:

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

希望能有所帮助。

您可以使用.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>

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

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