Coldfusion11的islistinlist函数
我有这个功能并且在coldfusion 2016和lucee上完美运行,但是我在cf11中运行,它失败了。
我想了解如何使其与 cf11 一起使用
private any function isListInList(list1, list2, returnBoolean = true){
var rv = false;
var matches = [];
listToArray(list1).each(
function(element) {
if(listToArray(list2).containsNoCase(element)){
rv = true;
arrayAppend(matches, element);
}
}
);
return arguments.returnBoolean ? rv : matches;
}
回答
此版本的函数将在 CF11 上编译和运行
private any function isListInList(list1, list2, returnBoolean = true){
var rv = false;
var matches = [];
var arr1 = listToArray(list1);
var arr2 = listToArray(list2);
arr1.each(
function(element) {
if(arr2.findNoCase(element)){
rv = true;
arrayAppend(matches, element);
}
}
);
return arguments.returnBoolean ? rv : matches;
}
这个使用for()循环的版本将针对大型数组进行优化,因为它会在找到匹配项时短路循环,而您只想要返回布尔值。
private any function isListInList(list1, list2, returnBoolean = true){
var arr1 = listToArray(list1);
var arr2 = listToArray(list2);
var rv = false;
var matches = [];
for( var element in arr1 ) {
if(arr2.findNoCase(element)){
if( returnBoolean ) {
return true;
} else {
arrayAppend(matches, element);
}
}
}
return arguments.returnBoolean ? false : matches;
}