等效于StructKeyList()的结构值

时间:2018-11-16 13:41:01

标签: forms coldfusion coldfusion-2016

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

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

如何从结构中获取无循环值列表?预先感谢。

2 个答案:

答案 0 :(得分:3)

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

<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的最后一个值。例如,您的代码应返回10、20、30。

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

答案 1 :(得分:2)

由于使用的是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值初始化为数组。我在数组中插入一行之前检查该值是否具有长度(如果需要,也可以修整),以便从最终列表中删除空元素。我还使用安全导航运算符(?.)进行一些基本验证,以确保元素存在(例如,如果表单未通过或归约产生无效结果),并使其更具抗错误性。

注意:我相信可以引入ArrayReduce来与CF11兼容。

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