等效于结构值的 StructKeyList()

Equivalent of StructKeyList() for struct value

StructKeyList() 将给我以逗号分隔的结构键列表。现在我需要获取以逗号分隔的结构值。现在这就是我为获得价值所做的事情

<cfloop collection="#form#" item="key" >
    #form[key]#,
</cfloop>

如何在没有循环的情况下从结构中获取值列表?提前致谢。

我解决了你的问题。据我所知,不可能在单个函数中获得结构中的值列表。我们必须循环键并获取每个键的值。但是我可以给出一个解决方案来获取以逗号分隔的结构值。

<cfset strNew = {"a":"10","b":20,"c":30}>

这里的 strNew 是我的示例结构。

 <cfset  myList = ''>
<cfloop collection="#strNew#" item="key" >
    <cfset myList = listappend(myList,structfind(strNew,key))>
</cfloop>
<cfdump var="#myList#" />

在这里,我遍历结构键并找到特定键的值,并使用 listappend 和 structfind 函数将其附加到列表中。

所以你不需要像#structure[key]#一样,在逗号(,)的末尾也添加了key的最后一个值。例如你的代码应该 return 10,20,30,.

所以你不需要那样做。使用 structfind 和 listappend 你也可以避免逗号结束。希望对你有帮助。

由于您使用的是 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 是我将传递到此页面的表单字段的模拟版本。我主要使用 StructReduceArrayAppendArrayToList 的成员函数版本。我还使用 initialVal 可选参数将缩减的 result 值初始化为数组。在向数组中插入一行之前,我检查该值是否具有长度(如果需要,我也可以 trim ),从而允许我从最终列表中删除空元素。我还使用安全导航运算符 (?.) 进行一些基本验证,以确保元素存在(例如表单未通过或缩减产生无效结果)并使其更不易出错。

注意:我相信可以收回来与 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