我正在尝试在数组中搜索类似的元素。例如,如果在我的数组中我有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]);
}
}
}
});
答案 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);