微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Coldfusion 11 的 islistinlist 函数

如何解决Coldfusion 11 的 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,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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。