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
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来验证代码中实际发生了什么,以及这是否是问题所在。提供一个可运行的查询数据样本(带有伪值)将使人们更容易提供帮助。这是一个伟大的目的。