CFML использует StructFindValue() для поиска и замены строковых значений внутри структуры

Вопрос. Как я могу использовать значение path, которое возвращает StructValueFind(), чтобы присвоить новое значение ключу, на который указывает path?

Я ищу все значения в структуре для определенной строки, а затем заменяю эту строку другим значением.

Я могу найти все вхождения искомой строки, используя StructFindValue(), который возвращает массив структур с ключами key, owner и path. Я бы предположил, что path позволит мне установить новое значение/заменить найденную строку.

Согласно документации Adobe CFML 9 для StructFindValue(), path ценность - это...

Путь: строка, по которой можно добраться до найденного ключа

Но я нигде не могу найти, как использовать значение path для достижения найденного ключа и конкретно присвоить этому ключу новое значение.


person Craig Harshbarger    schedule 19.10.2015    source источник


Ответы (1)


Вам не нужно возиться с путем: результат structFindValue() уже возвращает прямую ссылку на рассматриваемую подструктуру (в ключе owner).

Таким образом, такая вещь должна сделать свое дело:

<cfscript>
st = {
    top={
        middle1={lower1="value1",lower2="value2"},
        middle2={lower3="value3",lower4="value4"}
    }
};
writeDump(st);

value = structFindValue(st, "value3");
writeDump(value);

value[1].owner[value[1].key] = "new value";
writeDump(st);
</cfscript>
person Adam Cameron    schedule 19.10.2015
comment
Именно то, что я искал. Спасибо @Адам - person Craig Harshbarger; 19.10.2015
comment
Хороший. Не использовал раньше. Похоже, мощная функция. Но безопасно ли (с точки зрения производительности) использовать? - person Pankaj; 20.10.2015
comment
@Pankaj Моя философия заключается в том, что все безопасно для использования - с точки зрения производительности - до тех пор, пока не появятся доказательства того, что это проблема. Я не знаю ни о каких проблемах. - person Adam Cameron; 20.10.2015