2

我正在尝试遍历数组中的元素

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!")
    }
}
4

3 回答 3

5

除非我错过了重点,否则这就是 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>

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

于 2020-06-17T09:07:40.900 回答
2

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

<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

于 2020-06-17T18:19:35.133 回答
0

另一种方法是使用 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>
于 2020-06-17T11:16:35.427 回答