ColdFusion:从列表中选择第一个非空值

时间:2020-03-06 14:57:09  来源:igfitidea点击:

在JavaScript中,我们可以执行以下操作:

var a = null;
var b = "I'm a value";
var c = null;
var result = a || b || c;

并且"结果"将获得" b"的值,因为JavaScript短路了"或者"运算符。

我希望在ColdFusion中使用一句成语来做到这一点,而我能想到的最好的方法是:

<cfif LEN(c) GT 0><cfset result=c></cfif>
<cfif LEN(b) GT 0><cfset result=b></cfif>
<cfif LEN(a) GT 0><cfset result=a></cfif>

有谁能做得更好呢?

解决方案

ColdFusion没有空值。

示例基于对哪个项目为空字符串的选择。

如果这是我们要执行的操作,并且所有其他值都是简单值,则可以执行以下操作:

<cfset result = ListFirst( "#a#,#b#,#c#" )/>

(之所以起作用,是因为标准列表函数会忽略空元素。)

注意:其他CFML引擎确实支持null。

如果我们确实在处理空值(而不是空字符串),那么下面的函数将适用于Railo和OpenBlueDragon:

<cffunction name="FirstNotNull" returntype="any" output="false">
    <cfset var i = 0/>
    <cfloop index="i" from="1" to="#ArrayLen(Arguments)#">
        <cfif NOT isNull(Arguments[i]) >
            <cfreturn Arguments[i] />
        </cfif>
    </cfloop>
</cffunction>

然后使用该功能就很简单:

<cfset result = FirstNotNull( a , b , c ) />