arrays - 为什么我的原始数组被改变了?

标签 arrays coldfusion user-defined-functions udf lucee

基于 Coldfusion 文档...“Arrays are passed to user-defined functions by value, so the function gets a new copy of the array data, and the array in the calling page is unchanged by the function.

所以我正在做一个小练习项目。我首先获取一个数字列表,将其转换为数组(我称之为 cardArray),然后对数组进行排序,最后将数组传递给几个 UDF,这些 UDF 将在数字中寻找各种模式,并进行操作(如有必要) ) 参数(又名传递的数组)。

我从不引用 UDF 中的原始数组,我只引用参数名称。仍然...如果我在调用函数后 cfdump 原始数组,我的原始数组已被更改。谁能告诉我为什么?

我很确定我可以解决这个问题。因此修复这不是我的大问题。我的问题是这种行为完全违背了我“认为”这会起作用的方式,这让我发疯!

    function hasPair(pairArray) {
        pairCount = 0;
        for (i=2; i lte arrayLen(pairArray); i++){
            if(pairArray[i] is pairArray[i-1]){
                pairCount++
                arrayDeleteAt(pairArray, i)
                arrayDeleteAt(pairArray, i-1)
                i=2
            }
        }
        return pairCount;
    }

    function hasStraight(straightArray){
        sequenceCards = 0;
        for (i=2; i lte arrayLen(straightArray); i++){
            if(straightArray[i] - straightArray[i-1] is 1){
                sequenceCards++
            }
        }
        if (sequenceCards GTE 4){
            return 1;
        }
        else{
            return 0;
        }
    }

</cfscript>

<cfoutput>
    <cfset cardList = "5,6,7,8,10,8,9">
    <cfset cardArray = listToArray(cardList)>
    <cfdump var="#cardArray#" label="Original Array Before">
    <cfset arraySort(cardArray, "numeric", "desc")>
     #hasPair(cardArray)# <br/> 
     #hasStraight(cardArray)# <br/> 
    <cfdump var="#cardArray#" label="Original Array After">
</cfoutput>

结果是:

原始数组 BEFORE 函数调用 [6,6,7,8,10,8,9]。

函数调用后的原始数组 [10,9,7,6,5]

数组已排序(我期望,并且是正确的)。
然而,8s也不见了。我没想到这一点。第一个函数中的 arrayDeleteAt(pairArray, i) 和 arrayDeleteAt(pairArray, i-1) 方法删除了 8。但是这应该只从数组参数(pairArray)中删除元素,而不是原始数组(或者我认为)。

最佳答案

由于您在此处标记了 Lucee,因此我假设您是在 Lucee 而不是 Adob​​e 的实现上运行它。在这种情况下,Lucee 不符合 Adob​​e 规范; arrays are passed by reference像所有其他复杂对象一样。

关于arrays - 为什么我的原始数组被改变了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35900653/

相关文章:

php - 使用 php mysql 在巨型多维数组中搜索

javascript - 在 promise 中执行 forEach 异步请求吗?

web-services - Coldfusion Web 服务无法上传文件

VBA Excel UDF保留原始值

sql-server - SQL Server 2008 r2 - T-SQL LIKE 或 PATINDEX 匹配 A-Z、0-9、连字符、句点、下划线和波形符以外的字符

python - Spark-Submit 的 pickle 错误 "_pickle.PicklingError: args[0] from __newobj__ args has the wrong class"

c++ - 访问无限数组元素?

arrays - 打印哈希的 Perl 哈希

javascript - 将 document.write(screen.height) 转换为 coldfusion 中的数字?

javascript - 来自 AJAX 请求的 Post 参数在 ColdFusion 的表单范围内未定义