coldfusion - 对嵌套对象使用 structKeyExists

标签 coldfusion struct

我有一个这样的嵌套结构 struct1.struct2.foo .我想检查 foo存在。但是,struct2也不保证存在。我讨厌使用 isDefined() ,但我也认为调用 structKeyExists()两次是浪费的(例如,if (structKeyExists(struct, 'struct2') && structKeyExists(struct.struct2, 'foo')) {}
我考虑过使用structFindKey() ,但是如果存在 struct1.foo,我不想遇到问题

有没有更好的方法来实现这一点?

这是一个与 this question 类似的问题。 ,但我不是在处理 XML 文档,因此该帖子中的大多数答案对我都不起作用。

最佳答案

这是前面一个问题的核心问题(虽然更简洁):

How to dynamically loop through an array of structures

我会提供同样的答案。

How to dynamically loop through an array of structures

要重复基本部分,以下功能应该可以满足您的要求:

 <cffunction name="StructGetByKeyList">
      <cfargument name="struct">
      <cfargument name="key">

      <cfif StructKeyExists(struct,ListFirst(key,"."))>
           <cfif ListLen(key,".") GT 1>
                <cfreturn StructGetByKeyList(struct[ListFirst(key,".")],ListRest(key,"."))>
           <cfelse>
                <cfreturn struct[key]>
           </cfif>
      <cfelse>
           <cfreturn "">
      </cfif>
 </cffunction>

然后你可以只调用 StructGetByKeyList(struct1,"struct2.foo") ,如果它存在,它将返回键的字符串,如果不存在则返回一个空字符串。

要改为返回 bool 值,请使用以下命令:
<cffunction name="StructNestedKeyExists">
    <cfargument name="struct">
    <cfargument name="key">

    <cfif StructKeyExists(struct,ListFirst(key,"."))>
        <cfif ListLen(key,".") GT 1>
            <cfreturn StructNestedKeyExists(struct[ListFirst(key,".")],ListRest(key,"."))>
        <cfelse>
            <cfreturn true>
        </cfif>
    <cfelse>
        <cfreturn false>
    </cfif>
</cffunction>

关于coldfusion - 对嵌套对象使用 structKeyExists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14969221/

相关文章:

javascript - Coldfusion url 变量

c - 如何在不更改头文件的情况下更改函数返回的内容

ColdFusion 应用程序在 Application.cfc 上未提及应用程序名称

java - Eclipse 不断构建工作区

tomcat - CFWheels - 插件无缘无故被删除

coldfusion - 检查日期是否在两个日期之间

C++ 对象的快速排序 vector

c - 将结构划分为私有(private)和公共(public)部分?

c - 如何按照C编程语言标准初始化一个struct

c++ - 参与 std::vector C++