假设我有一个过滤字符串数组,我需要循环并检查其他传入的字符串.
var filterstrings = ['firststring','secondstring','thridstring'];
var passedinstring = localStorage.getItem("passedinstring");
for (i = 0; i < filterstrings.lines.length; i++) {
if (passedinstring.includes(filterstrings[i])) {
alert("string detected");
}
}
Run Code Online (Sandbox Code Playgroud)
我如何确保在过滤时忽略区分大小写(最好是使用正则表达式),如果var passedinstring要使用FirsTsTriNg或者字符串fiRSTStrING?
Kam*_*tti 34
ES6数组方法filter()可以简单的单行解决,使用includes()方法判断数组是否包含某个值,并结合toLowerCase()方法将其转换为小写。
var filterstrings = ['firststring','secondstring','thridstring'];
var passedinstring = localStorage.getItem("passedinstring");
// convert each string from filterstrings and passedinstring to lowercase
// to avoid case sensitive issue.
filteredStrings = filterstrings.filter((str) => str.toLowerCase().includes(passedinstring.toLowerCase())
Run Code Online (Sandbox Code Playgroud)
vsy*_*ync 33
您可以.includes使用.some返回boolean的方法进行切换。一旦找到匹配
它就会退出,这对于大型数组的性能非常有用:
.some(item => item.toLowerCase() == lookup.toLowerCase())
Run Code Online (Sandbox Code Playgroud)
var arr = ['foo','bar','bar'];
var lookup = "bAr";
// case-sensetive
console.log( arr.includes(lookup) )
// case-insensetive without caring about the type
console.log( arr.some(x => x.toLowerCase() == lookup.toLowerCase()) ) Run Code Online (Sandbox Code Playgroud)
或者使用唯一的名称定义您自己的数组原型方法:
// the name ("_includes") should be unique enough not to ever be overriten
// by future language updates or 3rd-party scripts
Array.prototype._includes = function(target){
return this.some(x => x.toLowerCase() == (target||'').toLowerCase())
}
console.log(
['foo', 'bar', 'bar']._includes("bAr")
)Run Code Online (Sandbox Code Playgroud)
gur*_*372 23
您可以从一开始创建一个RegExpfilterstrings
var filterstrings = ['firststring','secondstring','thridstring'];
var regex = new RegExp( filterstrings.join( "|" ), "i");
Run Code Online (Sandbox Code Playgroud)
那么test如果passedinstring那里
var isAvailable = regex.test( passedinstring );
Run Code Online (Sandbox Code Playgroud)
小智 13
你可以简单地转换passedinstring为小写。
var passedinstring = localStorage.getItem("passedinstring").toLowerCase();
Run Code Online (Sandbox Code Playgroud)
Sau*_*try 11
将 filterstring 和 passinstring 转换为小写并进行比较
var filterstrings = ['firststring','secondstring','thridstring'];
var passedinstring =
localStorage.getItem("passedinstring").toLowerCase();
for (i = 0; i < filterstrings.lines.length; i++) {
if (passedinstring.includes(filterstrings[i].toLowerCase())) {
alert("string detected");
}
}
Run Code Online (Sandbox Code Playgroud)
使用toLowerCase(). 比较时它全部string变成小写。
var product=productList.filter((x) => x.Name.toLowerCase().includes(("Active").toLowerCase()))
Run Code Online (Sandbox Code Playgroud)
我的选择是比较 UPPER 与 UPPER 或 lower 与 lower 转换两侧(我经常在 SQL 中这样做):
var filterstrings = ['firststring','secondstring','thirDstrIng'];
var passedinstring = 'ThIrDsTrInG3';
//used for of just to make it more readable
for (filterstring of filterstrings) {
if (passedinstring.toUpperCase().includes(filterstring.toUpperCase())) {
alert("string detected");
}
}
Run Code Online (Sandbox Code Playgroud)
提示string detected