标题总结了它。
答案 0 :(得分:27)
如果有人想要使用jquery更加集成的方法:
(function($){
$.extend({
// Case insensative $.inArray (http://api.jquery.com/jquery.inarray/)
// $.inArrayIn(value, array [, fromIndex])
// value (type: String)
// The value to search for
// array (type: Array)
// An array through which to search.
// fromIndex (type: Number)
// The index of the array at which to begin the search.
// The default is 0, which will search the whole array.
inArrayIn: function(elem, arr, i){
// not looking for a string anyways, use default method
if (typeof elem !== 'string'){
return $.inArray.apply(this, arguments);
}
// confirm array is populated
if (arr){
var len = arr.length;
i = i ? (i < 0 ? Math.max(0, len + i) : i) : 0;
elem = elem.toLowerCase();
for (; i < len; i++){
if (i in arr && arr[i].toLowerCase() == elem){
return i;
}
}
}
// stick with inArray/indexOf and return -1 on no match
return -1;
}
});
})(jQuery);
答案 1 :(得分:23)
您可以使用each()...
// Iterate over an array of strings, select the first elements that
// equalsIgnoreCase the 'matchString' value
var matchString = "MATCHME".toLowerCase();
var rslt = null;
$.each(['foo', 'bar', 'matchme'], function(index, value) {
if (rslt == null && value.toLowerCase() === matchString) {
rslt = index;
return false;
}
});
答案 2 :(得分:4)
感谢@Drew Wills。
我把它重写为:
function inArrayCaseInsensitive(needle, haystackArray){
//Iterates over an array of items to return the index of the first item that matches the provided val ('needle') in a case-insensitive way. Returns -1 if no match found.
var defaultResult = -1;
var result = defaultResult;
$.each(haystackArray, function(index, value) {
if (result == defaultResult && value.toLowerCase() == needle.toLowerCase()) {
result = index;
}
});
return result;
}
答案 3 :(得分:1)
没有。你将不得不摆弄你的数据,我通常将我的所有字符串都小写,以便于比较。还可以使用自定义比较函数进行必要的转换,使比较大小写不敏感。
答案 4 :(得分:1)
可以循环遍历数组并降低每个元素并降低你想要的内容,但在那个时间点,你也可以只比较它而不是使用inArray()
答案 5 :(得分:1)
看起来您可能必须为此实施自己的解决方案。 Here是一篇关于向jQuery添加自定义函数的好文章。您只需要编写一个自定义函数来循环并规范化数据然后进行比较。
答案 6 :(得分:1)
这些天我更喜欢使用underscore来完成这样的任务:
a = ["Foo","Foo","Bar","Foo"];
var caseInsensitiveStringInArray = function(arr, val) {
return _.contains(_.map(arr,function(v){
return v.toLowerCase();
}) , val.toLowerCase());
}
caseInsensitiveStringInArray(a, "BAR"); // true
答案 7 :(得分:0)
这种方式对我有用。
var sColumnName = "Some case sensitive Text"
if ($.inArray(sColumnName.toUpperCase(), getFixedDeTasksColumns().map((e) =>
e.toUpperCase())) == -1) {// do something}