Получение элемента из массива, где данные могут не существовать - PullRequest
2 голосов
/ 17 июня 2020

Я пробую l oop над элементами в массиве

data = [];

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

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

И получаю сообщение об ошибке

enter image description here

Не вариант

Мой код - это упрощение более крупного процесса. Следующее НЕ является вариантом

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

Ответы [ 3 ]

4 голосов
/ 17 июня 2020

Если я не упустил суть, то для чего предназначен 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-9d7 c -4cb82fa58f13.cfm

2 голосов
/ 17 июня 2020

Вы всегда можете направить Короля ...

<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

0 голосов
/ 17 июня 2020

Другой подход - использовать 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>
...