我正在尝试使用我拥有的一系列结构来执行一些简单的任务,并且感觉我几乎完成了我的解决方案,但在最后一刻遇到了一些麻烦。我正在努力完成以下任务:
使用以下值创建一个结构体; id, name, int arr[]。
我使用 FOR 循环来迭代 ID、名称、子 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 的结构中返回一个数组。我认为只返回一个整数,因此当执行下一个数组追加操作时,代码会爆炸。那么,如何在 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/