yig*_*mes 6 javascript arrays html5 lowercase underscore.js
我有一个网页,如果在搜索框中键入的内容然后迭代通过该值的文件,我需要它,以便搜索/查找不区分大小写.区分大小写必须保留在文件中,但为了进行比较,它忽略了大小写.所以目前我正在使用下划线命令:
arr=_.where(arr,filter);
Run Code Online (Sandbox Code Playgroud)
但是2个阵列arr和filter- 我需要比较/使用它们而不管情况如何,所以最终结果arr包含大小写混合但匹配值的结果arr.有人可以帮忙吗?
不幸的是,JS 在国际化不区分大小写的字符串比较方面表现不佳。如果您只是坚持使用 ASCII,那么解决方案相当简单(使用filterwhile,而不是where):
function getMatches(query, arr) {
var lowerQuery = query.toLowerCase();
return _.filter(arr, function(term) {
return term.toLowerCase() == lowerQuery;
});
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您希望预先计算所有内容,因为您希望在同一个 JS 会话中进行大量查询:
var index = _.groupBy(arr, function(term) { return term.toLowerCase(); });
// Post-process index to reduce memory footprint by turning redundant values to nulls
// (which take up less memory than arrays with a string in them).
index = _.object(_.map(index, function(terms, key) {
return [key, (terms.length == 1 && terms[0].toLowerCase() == terms[0] ? null : terms)];
}));
function getMatches(query) {
var lowerQuery = query.toLowerCase();
return (lowerQuery in index ? index[lowerQuery] || lowerQuery : []);
}
Run Code Online (Sandbox Code Playgroud)
toLowercase()由于后处理步骤,第二种方法的优点是仅计算最少的次数和最少的数据存储。
| 归档时间: |
|
| 查看次数: |
7846 次 |
| 最近记录: |