2008-09-30 59 views
3

在JavaScript中第一个非空值,你可以这样做:ColdFusion的:挑选从列表

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> 

任何人都可以做任何比这更好的?

+0

注意(在Peter的关于Adobe ColdFusion不支持空值的评论后添加):我知道ColdFusion不允许您创建或测试空值。 :^(在我提出这个问题的原因的背景下,一个空字符串可以被视为等于空 – 2008-09-30 23:26:31

回答

8

ColdFusion没有空值。

你的例子是基于哪个项目是一个空字符串的选择。

如果这是你以后,你的所有其他值是简单的值,你可以这样做:

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

(其中一期工程,因为标准列表函数忽略空元素。)

+0

感谢Peter。如果有问题的值可能包含逗号,请务必使用不同的分隔符 – 2008-09-30 23:18:07

1

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

如果我们真的正在处理空值(而不是空字符串),这里是将为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) />