структуры со структурами и логическими значениями - PullRequest
0 голосов
/ 27 января 2020

У меня есть переменная, которая состоит из структур. Эти структуры могут иметь переменные CFBoolean, больше структур и другие переменные. В начале это было вложено в два уровня. Сейчас мы продвигаемся на четыре уровня. Мне не нравится мой нынешний подход. Я также могу представить себе пять уровней. У меня нет контроля над внешней системой, которая нуждается в этих данных. Поэтому я ищу более общий подход.

function toJavaBoolean(any data){
    //for now, assume it's a struct to DBO conversion

    data.each(function(key, value) {
        if (getMetadata(data[key]).getName() == 'coldfusion.runtime.CFBoolean') {
            data[key] = javacast("boolean", data[key]);
        }

        if (isStruct(data[key]))    {
            data2 = data[key];
            data2.each(function(key, value) {
                if (getMetadata(data2[key]).getName() == 'coldfusion.runtime.CFBoolean')    {
                    data2[key] = javacast("boolean", data2[key]);
                }

                if (isStruct(data2[key]))   {
                    data3 = data2[key];
                    data3.each(function(key, value) {
                        if (getMetadata(data3[key]).getName() == 'coldfusion.runtime.CFBoolean')    {
                            data3[key] = javacast("boolean", data3[key]);
                        }

                        if (isStruct(data3[key]))   {
                            data4 = data3[key];
                            data4.each(function(key, value) {
                                if (getMetadata(data4[key]).getName() == 'coldfusion.runtime.CFBoolean')    {
                                    data4[key] = javacast("boolean", data4[key]);
                                }
                            });
                        }
                    });
                }
            });
        }
    });

1 Ответ

3 голосов
/ 27 января 2020

Вы можете использовать рекурсию вот так ...

function toJavaBoolean(any data){
    data.each(function(key, value) {
        if (getMetadata(data[key]).getName() == 'coldfusion.runtime.CFBoolean') {
            data[key] = javacast("boolean", data[key]);
        }
        else if (isStruct(data[key]))
            data[key] = toJavaBoolean(data[key]);
    }
    return data;
}

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

...