代码之家  ›  专栏  ›  技术社区  ›  Travis Heeter

如何将数组输出到一个逗号删除的字符串?

  •  2
  • Travis Heeter  · 技术社区  · 6 年前

    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

    1, 2, 3
    

    这是我的代码:

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

    但我明白了:

    123
    

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

    2 回复  |  直到 6 年前
        1
  •  2
  •   Alex    6 年前

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

    <!--- 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 ( see Shawn's answer )是一种更奇特(可读?)的方式。

        2
  •  3
  •   Shawn    6 年前

    由于您使用的是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() ;
    

    将返回删除了空元素的列表。

    根据@TravisHeeter的问题,如果您喜欢lambda表达式或箭头函数,可以在Lucee 5中使用它们。

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

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