如何将数组输出为逗号分隔的字符串?

时间:2018-11-16 17:19:15

标签: csv coldfusion coldfusion-2016

我有一个名为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"
}]

我正试图为PDF整齐地打印exhibits,所以我想这样用逗号分隔:

1, 2, 3

这是我的代码:

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

但是我明白了:

123

是的,我可以手动确定是否应该使用逗号,但是有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

由于使用的是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的问题,如果您更喜欢lambda表达式或箭头函数,则可以在Lucee 5中使用它们。

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

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

答案 1 :(得分:2)

通常的方法是先提取数据:

<!--- 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>

Array-mappingsee Shawn's answer)是一种更理想的(可读的?)方式。