我只是想在搜索时忽略大小写什么是最好的方法呢? (请不要Jquery)
function search(searchValue) {
var found = [];
for (var i = 0; i < photoData.length; i++) {
if (photoData[i].description.search(searchValue) != -1) {
found.push(photoData[i]);
}
}
console.log(found);
return found;
}
我尝试了search(searchValue.ignoreCase)
,但它返回任何具有大写字母的重复项。那有什么建议吗?我想忽略photoData描述的情况
答案 0 :(得分:3)
创建new RegExp
并使用不区分大小写的标志,如:
function search(array, searchValue) {
var matchedValues, re, i, j, cur;
matchedValues = [];
re = new RegExp(searchValue, "i");
for (i = 0, j = array.length; i < j; i++) {
cur = array[i];
if (cur.description.search(re) !== -1) {
matchedValues.push(cur);
}
}
return matchedValues;
}
DEMO: http://jsfiddle.net/7veds/
虽然您也可以使用Array.filter
方法:
function search(array, searchValue) {
var re = new RegExp(searchValue, "i");
return array.filter(function (item, idx) {
return item.description.search(re) !== -1;
});
}
DEMO: http://jsfiddle.net/TKphp/
参考:
答案 1 :(得分:1)
只要您不处理Unicode字符(因为某些情况下转换在某些Unicode支持的语言中意外地工作),请执行以下操作:
if (photoData[i].description.toUpperCase() === searchValue.toUpperCase()) {
your code
}
或者您可以使用toLowerCase ...
答案 2 :(得分:0)
这是Case insensitive search in array
的小片段function SearchArray( element, array ) {
var len = array.length, str = element.toString().toLowerCase();
for ( var i = 0; i < len; i++ ) {
if ( array[i].toLowerCase() == str ) { return i; }
}
return -1;
}