Поскольку вы используете CF2016, если вы хотите избежать цикла, вы всегда можете использовать одну из функций высшего порядка, например reduce()
.
fields = formScope.reduce( function(result, key, value) {
result.append(value) ;
return result ;
}, [] ) ;
Это берет структуру вашей form
области (formscope
) и использует reduce()
, чтобы пройти через нее и свести ее к одному значению (то есть значениям структуры, превращенным в массив). Затем мы превращаем возвращенный массив в список.
writeDump( fields.toList() )
Мой полный тестовый код на https://trycf.com/gist/f00cc62cd4631f44070faf8008e6788f/acf2016?theme=monokai
<cfscript>
formScope = {
empty1 : "" ,
fieldl : "text1" ,
field2 : "text2" ,
empty2 : "" ,
field3 : "text3" ,
field4 : "text4" ,
empty3 : ""
} ;
fields = formScope?.reduce( function(result, key, value) {
len(value) ? result.append(value) : "" ;
return result ;
}, [] ) ;
writeDump( fields?.toList() ?: "Form doesn't exist." ) ;
</cfscript>
Дает нам: text2,text3,text4,text1
.
formScope
- это моя смоделированная версия полей формы, которые будут переданы на эту страницу. Я использую в основном версии функций-членов StructReduce
, ArrayAppend
и ArrayToList
. Я также использую необязательный параметр initialVal
для инициализации значения result
сокращения как массива. Я проверяю, что значение имеет длину (я могу также обрезать при необходимости), прежде чем вставлять строку в массив, что позволяет мне удалять пустые элементы из моего окончательного списка. Я также использую оператор безопасной навигации (?.
), чтобы выполнить некоторую базовую проверку, чтобы убедиться, что элементы существуют (например, если форма не прошла или сокращение дало неверные результаты) и сделать ее более устойчивой к ошибкам.
ПРИМЕЧАНИЕ: Я полагаю, что это может быть возвращено для совместимости с CF11, когда был введен ArrayReduce
.
https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-s/structreduce.html
http://ryanguill.com/functional/higher-order-functions/2016/05/18/higher-order-functions.html
https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-a-b/arraytolist.html