循环遍历cf9中的列表

Phi*_*enn 12 coldfusion coldfusion-9 cfloop

开发人员指南的第116页说:"与cfloop标记不同,CFScript for-in循环不提供内置支持来循环查询和列表."

问:如何使用ColdFusion 9中的新脚本语法循环列表?

<cfloop list="#qry.Columnlist#" index="FieldName">
   <cfset form[FieldName] = qry[FieldName][1]>
</cfloop>
Run Code Online (Sandbox Code Playgroud)

Los*_*kpr 18

您也可以尝试使用listToArray,然后在CF9中使用for-in构造用于:

<cfscript>
aCol = listToArray (qry.ColumnList);

for( fieldName in aCol ){
    form[fieldName]  = qry[fieldName][1];
}

</cfscript>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这只适用于安装了Update 1.原始的CF9会发出错误,因为只允许在struct上使用for-in. (5认同)

Tom*_*lak 12

<cfscript>
  var i = 0;
  var l = ListLen(qry.Columnlist);
  var FieldName = "";
  for (i = 1; i lte l; i = i + 1)  // you also can use i++ instead
  {
    FieldName = ListGetAt(qry.Columnlist, i);
    form[FieldName] = qry[FieldName][1];
  }
</cfscript>
Run Code Online (Sandbox Code Playgroud)

编辑更好(可能更快,对于非常重的循环)版本的上述:

<cfscript>
  var i = 0;
  var Fields = ListToArray(qry.Columnlist);
  var FieldName = "";
  var l = arrayLen(Fields);
  for (i = 1; i lte l; i = i + 1)  // you also can use i++ instead
  {
    FieldName = Fields[i];
    form[FieldName] = qry[FieldName][1];
  }
</cfscript>
Run Code Online (Sandbox Code Playgroud)


Hen*_*nry 5

我会先把列表变成一个数组. ListGetAt()在循环中被调用n次效率不高. ArrayLen()但是应该很快.

<cfscript>
arr = ListToArray(qry.Columnlist);

for (i = 1; i <= ArrayLen(arr); i++)
{
    fieldName = arr[i];
    form[FieldName] = qry[FieldName][1];
}
</cfscript>
Run Code Online (Sandbox Code Playgroud)