arrays - ColdFusion、BigDecimal 不能用作数组

标签 arrays struct coldfusion cfml

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

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

  2. 我使用 FOR 循环来迭代 ID、名称、子 ID 等值的数组。

  3. 对于列表中的每一项,我会尝试判断是否之前见过该结构以及它是否在我的代理数组中。

  4. 如果不存在,请将当前结构添加到数组中。如果它已经存在于数组中,则将当前子 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 的结构中返回一个数组。我认为只返回一个整数,因此当执行下一个数组追加操作时,代码会爆炸。那么,如何在 Cold Fusion\CFSCRIPT 的结构内创建数组???

最佳答案

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

  • 重新定义了结构体定义,将数组类型作为第三个元素。
  • 完成此操作后,搜索似乎需要修改,因此我更改了键、值 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;


 }

关于arrays - ColdFusion、BigDecimal 不能用作数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44661039/

相关文章:

javascript - 在 Coldfusion 页面加载时执行 javascript

rest - 在 REST 服务函数中调用 init 函数

python - 将数组元素的所有组合相乘

java - 对不同数据类型数组中一种数据类型的对象使用接口(interface)方法? java

c - 如何正确计算结构体数组的大小?我这样做对吗?

c - 将结构变量写入文件,问题

coldfusion - 如何将参数值传递给 ColdFusion 数据库查询

javascript - 命名;在javascript中动态创建变量

c - 如何将字符串数组附加到共享内存? C

swift - 如何将核心数据加载到结构中