我已经被ColdFusion的列表宠坏了,并且遇到了一个或两个以逗号分隔的列表出现在Javascript中的情况。是否有相当于listFindNoCase('string','list')
,或在Javascript中实现它的高效方法?
哦,它应该能够用逗号处理列表项,例如: (“史密斯,约翰”,“母鹿,简”,“等......”)
这才是让我好起来的。
答案 0 :(得分:4)
仅供参考: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);
},
答案 1 :(得分:3)
这里的一个相关观察是CF列表自己不支持定界符char也是数据的一部分。您的样本&#34;列表&#34; &#39;&#34;史密斯,约翰&#34;,&#34; Doe,Jane&#34;&#39;是一个四个元素的逗号分隔列表&#39;&#39;&#39;&#39; John&#34;&#39;&#39;&#39;&#34;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39 ; Doe&#39;,&#39; Jane&#34;&#39;。为了满足您的要求,您 想要一个与JS listFindNoCase()
相当的JS,因为listFindNoCase()
实际上并不满足您对CF的要求透视,CF没有任何原生。要处理具有嵌入逗号的元素,您需要使用不同的char作为分隔符。
所以我的第一个答案是:我认为你应该修改你的要求而不是使用列表,而是寻找使用数组。
考虑到这一点,数据是如何进入JS的?你是否坚持使用基于字符串的列表?如果不是:根本不要。如果您的源数据是基于字符串的列表,您是否可以先将其转换为数组?您在&#34;架构&#34;中遇到了麻烦。我之前提到过的示例列表:从CF的角度来看,您不能使用逗号作为分隔符和数据。在编写代码以确定引用的逗号是数据,而未引用的逗号是分隔符之前,您确实需要做一些工作。您应该浏览一下CSV解析算法来处理这类事情。
但是,如果您可以更改分隔符(例如管道或分号或不会在数据中显示的内容),那么它很容易将其转换为数组(listToArray()在CF中,或在JS中的split())。然后你可以像其他人所说的那样使用indexOf()。
为了sh!ts&#39; n&#39;咯咯笑,如果你被一根绳子卡住了 - 如果你可以更改分隔符 - 你可以这样做,我想:
indexOf()
查找字符串中子字符串的第一个匹配位置,您需要使用正则表达式来匹配由分隔符char或字符串开头分隔的子字符串到分隔符char,或从分隔符char到字符串末尾没有中间分隔符字符。如果需要,我可以为此提出正则表达式。这还不知道列表,但我们知道它在字符串中的位置。indexOf()
。split()
,分隔分隔符list
中的位置。但是我强调你应该不那样做。从一开始就使用数组而不是字符串。
答案 2 :(得分:2)
您可以将indexOf
与.toLowerCase()
var list = '"Smith, John" , "Doe, Jane" , "etc..."';
if(list.toLowerCase().indexOf('"Smith, John"'))
如果您需要精确匹配,例如“Smith”存在时的“Smith”,只需使用分隔符填充字符串即可。例如,假设您的分隔符是分号(因为您的字符串中有逗号),请填充字符串的左侧和右侧,如下所示:
";Smith, John;Doe, Jane;"
同时填充搜索值,因此如果您正在寻找史密斯,则该值将变为:
";Smith;"
.toLowerCase().indexOf()
将返回-1(未找到)。但是";Smith, John;"
会返回0