#list #coldfusion #lucee
#Список #coldfusion #люси
Вопрос:
У меня есть код, работающий хорошо, но я пытаюсь внести улучшения
https://trycf.com/gist/5fdbccd52121856991e6fe3f82307d34/lucee5?theme=monokai
в приведенном выше примере я пытаюсь, является ли удаленный элемент в списке IN
, он также должен удалить другой элемент, начинающийся с I
буквы
Код выполняет цикл для элементов списка и выполняет сопоставление для обнаружения и удаления элемента
Источник
<cfscript>
i = 'AS,AK,SK,SB,IN,IP';
Y = 'IN';
local.X = [];
listEach(I, function(value, index) {
if (!listFindNoCase(Y, value)) {
arrayAppend(X, value);
}
});
dump(x);
</cfscript>
Комментарии:
1. Вы имеете в виду, что хотите удалить,
IP
иIN
еслиIN
он найден в вашем списке?2. да, и то же самое с другими случаями, если я удаляю SK, он должен удалить соответствующий элемент, начиная с S, и то же самое с AB
3. Вы можете размещать ссылки, но, пожалуйста, разместите код и ЗДЕСЬ, чтобы вопрос оставался полезным и для других (не только для вас) еще долго после разрыва ссылки….
Ответ №1:
Вы можете сделать это, предварительно проверив, содержит ли список ваш элемент, используя listFindNoCase
, затем используя listFilter
для фильтрации элементов, которые вы не хотите видеть в своем новом списке, что-то вроде этого:
<cfscript>
originalList = 'AS,AK,SK,SB,IN,IP';
needle = 'IN,AS';
newList = originalList;
listEach(needle, function(needle) {
if (listFindNoCase(newList, needle)) {
newList = listFilter(newList, function(value) {
return lcase(left(value, 1)) != lcase(left(needle, 1));
});
}
});
dump(newList);
</cfscript>
Комментарии:
1. Это не сработает, если бы у меня было два значения в needle, такие как ‘IN, AS’
2. Сколько разных значений может содержать список «needle» и что это за значения? Каков ожидаемый результат для каждого из этих значений?
3. Изменен код, чтобы он учитывал список аргументов для поиска в исходном списке.