Я пытаюсь создать функцию, которую можно использовать в различных случаях для поиска значения в списке (массиве).Вот код, который у меня есть:
function findInArray(needle, arr, exact, sensitive) {
if (needle && arr) {
var hayLength = arr.length
for (var i = 0; i < hayLength; i++) {
if (arr[0].length >= 0) {var haystack = arr[i][0];}
else {haystack = arr[i];}
if (exact && sensitive && (haystack === needle)) {return i;}
else if (exact && !(sensitive) && (haystack == needle)) {return i;}
else if (!(exact) && sensitive && (haystack.toLowerCase().search(needle.toLowerCase()))>-1) {return i;}
else if (!(exact) && !(sensitive) && haystack.search(needle)>-1) {return i;}
}
}
return -1;
}
Я уверен, что приведенный выше код можно оптимизировать, но у меня не работает третий случай, когда я хочу сопоставить строку в случае игнорирования списка.Например,
var arr = ["Partner1", "Partner2"]
var needle = "partner1"
var n = findInArray(needle, arr, true, false);
Возвращает -1.
. Я хочу, чтобы функция работала со списком 1D или многомерным списком, а также находила подстроки (например, совпадения "Google" и "Googler").).
Ответ: Сочетая @NoobishPro и @tehhowch "best of", это хорошо работает:
function findInArray(needle, arr, exact, sensitive) {
exact = exact !== false;
sensitive = sensitive !== false;
//We will catch the sensitivity parameter here to save performance
if (!sensitive) {
needle = needle.toLowerCase();
}
//determine array length
var hayLength = arr.length;
for (var i = 0; i < hayLength; i++) {
//Set haystack
var haystack = arr[i];
//Check if it's another array. If so, redo this function to go 1 level deeper.
if (haystack.constructor == Array) {
return findInArray(needle, haystack, exact, sensitive);
}
//We can lowercase it here to save on if-statement lowercasing
if (!sensitive) {
haystack = haystack.toLowerCase();
}
//easy one
if (exact && sensitive && (haystack == needle)) {
return i;
} else if (exact & (haystack == needle)) {
return i;
} else if (!exact & (haystack.search(needle)) > -1) {
return i;
}
}
return -1;
}