Зацикливание на списках в cf9
-
19-09-2019 - |
Вопрос
Страница 116 руководства разработчика гласит "В отличие от тега cfloop, циклы CFScript for-in не предоставляют встроенной поддержки для выполнения циклов по запросам и спискам".
Q:Как мне выполнить цикл по списку, используя новый синтаксис скрипта в ColdFusion 9?
<cfloop list="#qry.Columnlist#" index="FieldName">
<cfset form[FieldName] = qry[FieldName][1]>
</cfloop>
Решение
Вы также можете попробовать listToArray, а затем использовать конструкцию for-in для массивов в CF9 как:
<cfscript>
aCol = listToArray (qry.ColumnList);
for( fieldName in aCol ){
form[fieldName] = qry[fieldName][1];
}
</cfscript>
Другие советы
<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>
ОТРЕДАКТИРУЙТЕ более приятную (возможно, даже немного более быструю, для действительно тяжелых циклов) версию приведенного выше:
<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>
Сначала я бы превратил список в массив. ListGetAt()
неэффективно вызываться n раз в цикле. ArrayLen()
однако должно быть довольно быстро.
<cfscript>
arr = ListToArray(qry.Columnlist);
for (i = 1; i <= ArrayLen(arr); i++)
{
fieldName = arr[i];
form[FieldName] = qry[FieldName][1];
}
</cfscript>
Не связан с StackOverflow