Arrays ColdFusion、BigDecimal不能用作数组

Arrays ColdFusion、BigDecimal不能用作数组,arrays,struct,coldfusion,cfml,Arrays,Struct,Coldfusion,Cfml,我正试图用我拥有的一系列结构来执行一些简单的任务,我觉得我的解决方案差不多完成了,但在最后一刻遇到了一些麻烦。我正在努力完成以下任务: 创建具有以下值的结构;id,name,int-arr[] 我使用FOR循环来迭代ID、name、sub-ID等值的数组 对于列表中的每一项,我都试图决定是否以前见过该结构,以及它是否在我的数组中 如果不存在,则将当前结构添加到数组中。如果其已存在于数组中,则将当前子id添加到结构的int arr[]条目中 当我运行下面的代码时,我不断得到错误,“BigDecim

我正试图用我拥有的一系列结构来执行一些简单的任务,我觉得我的解决方案差不多完成了,但在最后一刻遇到了一些麻烦。我正在努力完成以下任务:

  • 创建具有以下值的结构;id,name,int-arr[]

  • 我使用FOR循环来迭代ID、name、sub-ID等值的数组

  • 对于列表中的每一项,我都试图决定是否以前见过该结构,以及它是否在我的数组中

  • 如果不存在,则将当前结构添加到数组中。如果其已存在于数组中,则将当前子id添加到结构的int arr[]条目中

  • 当我运行下面的代码时,我不断得到错误,“BigDecimal不能用作数组”,我不明白发生了什么。我不熟悉CFSCRIPT,所以我可能没有从结构中获取arr[]值,或者没有正确定义结构,因此第三个值是数组类型

    remote array function getCurrAgenciesList(String Acct_Id) returnformat="JSON"
        {
    
            include "qry_getCurrentAssignedRepoAgenciesAll.cfm";
    
            //define arr to hold values...
            var agenciesArr = [];
            var recordLength = getCurrentAssignedRepoAgencies.RecordCount;
    
                for(agency in getCurrentAssignedRepoAgencies)
                {
                    currentStruct = {id=agency.repoID, name=agency.repoName, relatedColl=agency.collatSub};
                    var structArrIndex = arrayOfStructsFind(agenciesArr, "id", agency.repoID);
    
                    if(structArrIndex eq 0)
                    {
                        //add new struct to agenciesArr
                        ArrayAppend(agenciesArr,currentStruct,"true");
                    }
                    else
                    {
                        //find current struct in array using index from before...
                        var collFromStr = agenciesArr[structArrIndex]['relatedColl'];
                        //add current collatsub to array, append.
                        var updatedStruct = ArrayAppend(collFromStr,agency.collatSub);
                        //reassign updated arr[] struct value back in array.
                        agenciesArr[structArrIndex]['relatedColl'] = collFromStr;
                    }
    
                }
                    //return...
                    return agenciesArr;
            }
    
            function arrayOfStructsFind(Array, SearchKey, Value)
            {
                    var result = 0;
                    var i = 1;
                    var key = "";
                    for (i=1;i lte arrayLen(array);i=i+1)
                    {
                       for (key in array[i])
                       {
                         if(array[i][key]==Value and key == SearchKey)
                         {
                            result = i;
                            return result;
                         }
                       }
                    }
    
                return result;
            }
    
    任何帮助都将不胜感激,因为我觉得我被这最后一件事困住了,或者我错过了什么。欢迎任何反馈

    更新发生在第27行的错误

    var updatedStruct = ArrayAppend(collFromStr,agency.collatsub);
    
    更新时间:下午3:39

    我相信这个问题与上面这句话无关,但这句话:

    var collFromStr = agenciesArr[structArrOmdex]['relatedColl'];
    

    我要求从key relatedColl的struct返回一个数组。我认为只返回一个整数,所以当执行下一个数组追加操作时,代码会爆炸。那么,在Cold Fusion中如何在结构内部创建数组呢?\CFSCRIPT???

    我通过以下更改解决了我的问题:

    • 重新定义结构定义,将数组类型作为第三个元素
    • 执行此操作后,看起来需要修改搜索,因此我切换了key,value if语句的顺序
    我还收集了大量的信息。太棒了

    最终代码:

    remote array function getCurrAgenciesList(String Acct_Id) returnformat="JSON"
    {
    
    include "qry_getCurrentAssignedRepoAgenciesAll.cfm";
    
    //define arr to hold values...
    var agenciesArr = [];
    var recordLength = getCurrentAssignedRepoAgencies.RecordCount;
    
        for(agency in getCurrentAssignedRepoAgencies)
        {
            arr = [agency.collatSub];
            currentStruct = {id=agency.repoID, name=agency.repoName, relatedColl=arr};
            var structArrIndex = arrayOfStructsFind(agenciesArr, "id", agency.repoID);
    
            if(structArrIndex eq 0)
            {
                //add new struct to agenciesArr
                ArrayAppend(agenciesArr,currentStruct,"true");
            }
            else
            {
                //find current struct in array using index from before...
                var collFromStr = agenciesArr[structArrIndex]['relatedColl'];
                //add current collatsub to array, append.
                ArrayAppend(collFromStr,agency.collatSub,"true");
                //reassign updated arr[] struct value back in array.
                agenciesArr[structArrIndex]['relatedColl'] = collFromStr;
            }
    
        }
            //return...
            return agenciesArr;
    }
    
    function arrayOfStructsFind(Array, SearchKey, Value)
    {
            var result = 0;
            var i = 1;
            var key = "";
            for (i=1;i lte arrayLen(array);i=i+1)
            {
               for (key in array[i])
               {
                 if(key == SearchKey and array[i][key]==Value)
                 {
                    result = i;
                    return result;
                 }
               }
            }
    
        return result;
    
    
     }
    

    错误发生在哪一行?我更新了原始描述,以确定错误发生的位置。请查看。(编辑)ArrayAppend返回布尔值,而不是结构。不确定代码到底在做什么,但是。。。确保作用域为所有函数局部变量(包括循环索引和查询对象)。此外,可能不是问题,但。。。请注意,结构是通过引用传递的。我相信问题最有可能是这样的:RE:我认为只有一个整数是返回的。您可以在策略点使用cfdump来验证代码中实际发生了什么,以及这是否是问题所在。提供一个可运行的查询数据样本(带有伪值)将使人们更容易提供帮助。这是一个伟大的目的。