如何将数组输出为逗号分隔的字符串?
How to output an array to a comma-deliniated string?
我有一个名为 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
是的,我可以手动确定是否应该有逗号,但是有更好的方法吗?
由于您使用的是 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() ;
将return删除空元素的列表。
编辑 2:
根据@TravisHeeter 的问题,如果您更喜欢 lambda 表达式或箭头函数,则可以在 Lucee 5 中使用它们。
exhibits.map( (i) => i.item ).filter( (j) => len(j) ).toList()
https://trycf.com/gist/907a68127ddb704611b191d494aa94ce/lucee5?theme=monokai
通常的做法是先提取数据:
<!--- 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-mapping () 是一种更奇特(可读?)的方式。
我有一个名为 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
是的,我可以手动确定是否应该有逗号,但是有更好的方法吗?
由于您使用的是 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() ;
将return删除空元素的列表。
编辑 2:
根据@TravisHeeter 的问题,如果您更喜欢 lambda 表达式或箭头函数,则可以在 Lucee 5 中使用它们。
exhibits.map( (i) => i.item ).filter( (j) => len(j) ).toList()
https://trycf.com/gist/907a68127ddb704611b191d494aa94ce/lucee5?theme=monokai
通常的做法是先提取数据:
<!--- 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-mapping (