【问题标题】:trying to wrap a structure with another set of structure试图用另一组结构包装一个结构
【发布时间】:2020-06-12 00:19:27
【问题描述】:

我试图用另一个结构来包装一个结构,但我肯定错过了一些东西

我想这样展示它

account: {
    "name": "Example Account",
    "details": "https://www.example.com"
  }

我正在尝试这个功能,但我错过了一些东西,可能我应该使用 structmap,不确定

<cffunction name="SO">
    <cfargument name="name" required="true" type="struct">
    <cfargument name="data" required="true" type="struct">
    <cfloop collection="#arguments.Data#" index="i">
        <cfset arguments.Name['#lcase(i)#'] = arguments.Data[i]>
    </cfloop>   
    <cfreturn arguments.Name>
</cffunction>

【问题讨论】:

  • 如果没有输入样本,就很难诊断问题。这两个输入结构是什么样的?
  • 一个是表单,另一个我想将该表单嵌套到我传递的对象中
  • 用样本值更新问题会更容易理解。
  • 这是预期的输出。我在问输入。该函数采用两种结构。你能发布一个例子吗?

标签: struct coldfusion lucee


【解决方案1】:

当我第一次看到这个时,我以为你本质上想要一个新的结构,它有一个“名称”(包含一个字符串)和一个包含一个结构的“数据”。

您的初始设置基本上是

<cfset name = "Test" >
<cfset data = { details: "detail1" , details2: "detail2" } >

在处理 CF 中的大多数数据结构时,我通常发现使用 CFSCRIPT 而不是标签更容易和更清晰。所以我想出了

<cfscript>
    function SO ( required String name, required Struct data ) {
        var retval = { name:"",data:{} } ;

        retval.name = arguments.name ;

        arguments.data.map( function(key, val) {
            retval.data[key.lcase()] = val ;
        } ) ;

        return retval;
    }

    writedump( SO(name,data) ) ;
</cfscript>

试图解开这一点,看来您要做的只是将“名称”值添加到“数据”结构中。这可以通过

轻松完成
<cffunction name="SO_tags">
    <cfargument name="name" required="true" type="string">
    <cfargument name="data" required="true" type="struct">

    <cfset retval2 = arguments.data >
    <cfset retval2.name = arguments.name>
    <cfreturn retval2>
</cffunction>

<cfset structure = {"account":SO_tags(name,data)}>
<cfdump var = #structure#>

或者使用脚本,它可以归结为一行。

<cfscript>
    function SO3 ( required String name, required Struct data ) {
        return arguments.data.append( {"name":arguments.name} ) ;
    }

writedump( {"account":SO3(name,data)} ) ;
</cfscript>

根据它如何适合您的其余代码,您甚至可能不需要函数。

https://cffiddle.org/app/file?filepath=b6e92a83-ebc9-40eb-a712-f402d7f9ed85/f4fb9f8e-3b60-4a64-8c02-2cd106736df0/4e00abae-b949-4934-86e8-870745259127.cfm

编辑:更改输出以将其嵌套在“帐户”结构中。

【讨论】:

  • 嗨@shawn,就转储的调用而言:&lt;cfset structure = {"account":SO_tags(name,data)}&gt; - 您正在发送一个带有名称的结构:对值,我可以发送表单而不是那个,
  • 我正在尝试像这样使用它:SO(name = "account",data = form) - 但它似乎不起作用
  • @chacha 就像您之前的评论一样。 “不工作”是什么意思?您遇到了什么错误或行为?
猜你喜欢
  • 2015-11-06
  • 2012-07-30
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
相关资源
最近更新 更多