从数据可能不存在的数组中获取元素

Getting element from an array where data may not exist

我正在尝试循环数组中的元素

data = [];

data[3] = true;
data[4] = false;

for (i = 1; i <= data.len(); i++) {
    if(data[i])   {
        writeoutput("Kittens!")
    }
}

我得到一个错误

不可行

我的代码是对较大过程的简化。以下不是一个选项

for (datum in data) {
    if(datum)   {
        writeoutput("Kittens!")
    }
}

除非我错过了重点,否则这就是 arrayIsDefined() 的用途,例如:

<cfscript>
data = [];

data[2] = javaCast( "null", 0 );
data[3] = true;
data[4] = false;

for (i = 1; i <= data.len(); i++) {
    if(arrayIsDefined(data,i) && data[i])   {
        writeoutput("Kittens!");
    }
}
</cfscript>

这个 fiddle 演示了以上内容并确认它也安全地处理了数组中显式设置的 null 元素的存在:https://cffiddle.org/app/file?filepath=97b96317-8dcd-4620-a953-2c895191a8dc/67ccc09d-f4b5-4a2e-93d6-4cf3269a29d3/19c13ebe-1af4-4c72-9d7c-4cb82fa58f13.cfm

另一种方法是使用try/catch。

<cfscript>
data = [];

data[3] = true;
data[4] = false;
for (i = 1; i <= data.len(); i++) {
try {
    if(data[i])   {
        writeoutput("Kittens!" & i & "<br>")
    }
}
catch (any e) {
writeoutput("puppies " & i & "<br>");
}

}
</cfscript>

你总是可以引导国王...

<cfscript>
data = [];

data[3] = true;
data[4] = false;



for (i = 1; i <= data.len(); i++) {

    if( data[i]?:false )   {
        writeoutput("Kittens!");
    }
    else { writeoutput("nope"); }
}


</cfscript>

https://trycf.com/gist/d8664be620520252871e91796bef2f61/acf2016?theme=monokai