循环遍历结构数组并输出特定的结构值?

时间:2018-12-04 18:12:24

标签: arrays data-structures coldfusion coldfusion-10 cfloop

我有结构数组,应该在其中访问特定字段。这是我的数据示例:

array
1   
   struct
   address_city     Washington
   address_state    DC
array
2   
   struct
   address_city     New York
   address_state    NY
array
3   
   struct
   address_city     Miami
   address_state    FL

我有以下代码循环遍历数组,然后通过内部循环遍历结构:

<cfloop from="1" to="#arrayLen(arrData)#" index="i">
    <cfset data = arrData[i]>
    <cfloop collection="#data#" item="key">
        <cfoutput>#key#:#data[key]#<br></cfoutput>
    </cfloop> 
</cfloop>

上面的代码将产生以下输出:

address_city:Washington
address_state:DC
address_city:New York
address_state:NY
address_city:Miami
address_state:FL

相反,我只需要访问address_state值。我已经尝试过这样的事情:

<cfloop from="1" to="#arrayLen(arrData)#" index="i">
    <cfset data = arrData[i]>
    <cfloop collection="#data#" item="key">
        <cfoutput>#data[key]['address_state']#<br></cfoutput>
    </cfloop> 
</cfloop>

然后我收到此错误消息:

Message     You have attempted to dereference a scalar variable of type class java.lang.String as a structure with members. 

是否有一种方法只能从数组中的每个结构输出一个字段?在JS Object上进行迭代时,在JavaScript中可以执行类似的操作。示例:

for (var key in data) {
    console.log(data[key]['address_state']);
}

如果有人知道在ColdFusion中实现此目标的方法,请告诉我。

2 个答案:

答案 0 :(得分:4)

很有趣,有一种方法几乎可以像JS示例一样进行操作。

for (key in data) {
    writeOutput( "Address State = " & key.address_state & "<br>");
}

https://trycf.com/gist/f0bd28bbf644912d320b10fdc5f526f4/acf?theme=monokai

您收到错误,是因为您在不需要时引用了data数组。根据循环的性质,您已经在key中的data中循环。在您的脚本示例中,您不需要遍历整个数组。

答案 1 :(得分:1)

我已经解决了您的问题,希望您能获得基于脚本的编码风格的答案。但是正如您在上面的评论中所说,您需要基于标签的功能。所以在这里,我基于标记发布了我的功能。希望对您有帮助。谢谢。

<cfloop array ="#arrData#" index="data">
    Address_State: #data.address_state# <br>
</cfloop>