ColdFusion,BigDecimal不能用作数组

时间:2017-06-20 18:58:34

标签: arrays struct coldfusion cfml

我正在尝试使用我拥有的一系列结构执行一些简单的任务,并且感觉我几乎完成了我的解决方案,但是我遇到了一些麻烦。我正在努力完成以下任务:

  1. 使用以下值创建结构; id,name,int arr []。

  2. 我正在使用FOR循环迭代ID,name,sub id等值的数组。

  3. 对于我列表中的每个项目,我正在尝试做出决定,如果我之前看过该结构,以及它是否在我的代理商Array中。

  4. 如果不存在,请将当前结构添加到数组中。如果它已经存在于数组中,则将当前的sub id添加到struct的int arr []条目中。

  5. 当我运行下面的代码时,我不断收到错误," BigDecimal不能用作数组"我不明白发生了什么。我是CFSCRIPT的新手,所以也许我没有从结构中获取arr []值或没有定义我的结构正确所以第三个值是Array类型。

    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 PM

    我认为这个问题与上述问题无关,但这一行:

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

    我要求从key,relatedColl返回结构中的数组。我想只有一个整数返回,所以当执行下一个Array Append操作时,代码会爆炸。那么,如何在Cold Fusion \ CFSCRIPT ????

    中的结构内创建一个数组

1 个答案:

答案 0 :(得分:2)

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

  • 重新定义结构定义以将数组类型作为第三个元素。
  • 执行此操作后,看起来需要修改搜索,因此我切换了我的密钥的顺序,值为if语句。

我还从this link收集了大量信息。太棒了。

最终代码:

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;


 }