Как вывести массив в разделенную запятыми строку? - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть массив с именем device, который выглядит следующим образом (упрощенно):

label : "Device 1",
exhibits : [{
    item : 1,
    desc : "This is a sample"
},{
    item : 2,
    desc : "This is another sample"
},{
    item : 3,
    desc : "This is a third"
}]

Я пытаюсь аккуратно напечатать exhibits для PDF, поэтому я думаю, что запятаяДелиниция, как это:

1, 2, 3

Это мой код:

<cfloop array="#device.exhibits#" index="exhibit">
    #exhibit.item#
</cfloop>

Но я получаю это:

123

Да, я мог бы вручную выяснить, если естьдолжны быть запятые или нет, но есть ли лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Обычный подход - сначала извлечь данные:

<!--- extract the itemNumber of every exhibit --->
<cfset itemNumberList = []>
<cfloop array="#device.exhibits#" index="exhibit">
    <cfset itemNumberList.add(exhibit.itemNumber)>
</cfloop>

А затем мы преобразовываем извлеченные данные в список (строку), разделенный запятыми:

<cfset itemNumberList = arrayToList(itemNumberList, ", ")>

<!--- 1, 2, 3 --->
<cfoutput>#itemNumberList#</cfoutput>

Отображение массива ( см. Ответ Шона ) - более причудливый (читаемый?) Способ.

0 голосов
/ 16 ноября 2018

Поскольку вы используете CF11 +, вы можете использовать функцию ArrayMap с ArrayList, чтобы превратить массив в список.

exhibits.map( function(i) { return i.item ; } ).toList() ;

С вашим примером массива он дает вам "1,2,3".

В другом из моих ответов я прошел через обработку пустых элементов.Поскольку это массив структур, я не знаю, будет ли это проблемой.Как вы получаете эти данные для вашего exhibits массива?

РЕДАКТИРОВАНИЕ:

exhibits.map( function(i) { return i.item ; } )
    .filter( function(j) { return len(j) ; } )
    .toList() ;

вернет список с удаленными пустыми элементами.

РЕДАКТИРОВАТЬ 2:

Согласно вопросу @TravisHeeter, если вы предпочитаете лямбда-выражения или функции стрелок, вы можете использовать их в Lucee 5.

exhibits.map( (i) => i.item ).filter( (j) => len(j) ).toList()

https://trycf.com/gist/907a68127ddb704611b191d494aa94ce/lucee5?theme=monokai

...