Поиск структуры, вложенной в массив - PullRequest
1 голос
/ 20 февраля 2012

У меня есть структура, которая находится внутри массива, который вложен в другую структуру, например: Arguments.cart.data.Items[x].Labels.Pkg.Title (x - это индекс, так как я циклически перебираю Items).

Items - это массив, в то время как Labels, Pkg и Title являются вложенными структурами.

Title не всегда существует.Поэтому я хотел бы проверить это.Однако использование structFindKey возвращает ошибку

Вы попытались разыменовать скалярную переменную типа class coldfusion.runtime.Array как структуру с элементами

Я мог быпросто посмотрите внутрь Arguments.cart.data;однако, если в массиве несколько строк, некоторые строки могут содержать Title, а другие - нет.Поэтому я хочу проверить Title внутри каждого Items.

Я также пытался arrayFind, но затем я получаю сообщение об ошибке

Структура не может использоваться в качестве массива

Я нахожусь впотеря здесь.

Ответы [ 2 ]

4 голосов
/ 20 февраля 2012

Это сделает работу

<cfscript>
    for (i=1;i<=ArrayLen(arguments.cart.data.Items);i++) {
        tempI = arguments.cart.data.Items[i];
        if (IsDefined('tempI.Labels.Pkg.Title')) {
            // It exists
        } else {
            // It doesn't
        }
    }
</cfscript>

IsDefined не очень хорошо работает с массивами, но, присваивая каждому элементу массива временное значение, вы можете ссылаться на него в IsDefined.

В качестве альтернативы вы можете сделать следующее, если вы предпочитаете StructKeyExists

<cfscript>
    for (i=1;i<=ArrayLen(arguments.cart.data.Items);i++) {
        tempI = arguments.cart.data.Items[i];
        if (
            StructKeyExists(tempI,'Labels')
            && StructKeyExists(tempI.Labels,'Pkg')
            && StructKeyExists(tempI.Labels.Pkg,'Title')
        ) {
            // It exists
        } else {
            // It doesn't
        }
    }
</cfscript>
1 голос
/ 20 февраля 2012

Я сталкивался с этим и в прошлом. Просто временно вставьте ваш массив в структуру ... это заставит structFindKey() и structFindValue() работать должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...