Coldfusion 11 的 islistinlist 函数

islistinlist function for coldfusion 11

我有这个功能,运行在 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;
}