我已经习惯了ColdFusion的列表,但有一两个情况下在Javascript中出现了逗号分隔的列表。是否有listFindNoCase('string','list')
的等效方法或实现它的高性能方式?
噢,它还应该能够处理带逗号的列表项,例如: ( "Smith, John" , "Doe, Jane" , "等等..." )
这才是让我困扰的关键。
我已经习惯了ColdFusion的列表,但有一两个情况下在Javascript中出现了逗号分隔的列表。是否有listFindNoCase('string','list')
的等效方法或实现它的高性能方式?
噢,它还应该能够处理带逗号的列表项,例如: ( "Smith, John" , "Doe, Jane" , "等等..." )
这才是让我困扰的关键。
FYI:jList的实现:https://github.com/davidwaterston/jList
不过,它无法处理带逗号的列表项,这与您的要求不符。
listFind : function (list, value, delimiter) {
delimiter = (typeof delimiter === "undefined") ? "," : delimiter;
var i,
arr = list.split(delimiter);
if (arr.indexOf !== undefined) {
return arr.indexOf(value) + 1;
}
for (i = 0; i < list.length; i += 1) {
if (arr[i] === value) {
return i + 1;
}
}
return 0;
},
listFindNoCase : function (list, value, delimiter) {
delimiter = (typeof delimiter === "undefined") ? "," : delimiter;
list = list.toUpperCase();
value = String(value).toUpperCase();
return this.listFind(list, value, delimiter);
},
indexOf()
方法查找字符串中第一个匹配的子字符串的位置,您需要使用正则表达式来匹配由定界符字符分隔的子字符串,或者从字符串开头到定界符字符,或者从定界符字符到没有中间定界符字符的字符串结尾。如果必要,我可以提供此正则表达式。这仍然不会考虑列表,但我们知道它在字符串中的位置。indexOf()
方法返回的位置。split()
方法,在定界符上进行拆分。list
中匹配项所在的位置。但是我强调您不应该这样做。最好从一开始就使用数组而不是字符串。
indexOf
与.toLowerCase()
结合使用。var list = '"Smith, John" , "Doe, Jane" , "etc..."';
if(list.toLowerCase().indexOf('"Smith, John"'))
如果您需要精确匹配,例如当存在“Smithson”时仅匹配“Smith”,请使用分隔符填充字符串。例如,假设您的分隔符是分号(因为您的字符串中有逗号),请按照以下方式填充字符串的左侧和右侧:
";Smith, John;Doe, Jane;"
还需填充搜索值,例如,如果您要查找 Smith,则该值会变为:
";Smith;"
.toLowerCase().indexOf()
会返回-1(未找到)。但";Smith, John;"
会返回0。