#javascript #arrays #typescript #angular-formly #ngx-formly
#javascript #массивы #typescript #угловато-формально #ngx-formly
Вопрос:
Я чувствую, что это довольно простой вопрос, но я боролся с ним последние несколько часов..
data[0].fieldArray.fieldGroup[4].hideExpression = (model: any, formState: any) => {
for (const item of formState.mainModel.config.linkItems) {
console.log(item);
if (item.displaySubmenu) {
return false;
} else {
return true;
}
}
};
Мой formState содержит массив с несколькими объектами внутри, мне нужно определить, является ли значение внутри каждого объекта (displaySubmenu ) либо истинным, либо ложным, и возвращает true или false для запуска hideExpression .. До сих пор мне удавалось либо запускать все элементы на странице, либо первый или последний..
Я также пытался использовать forEach, map, но я чувствую, что мне не хватает чего-то довольно простого, просто не могу понять, что
Ответ №1:
Для этого можно использовать метод array.filter:
data[0].fieldArray.fieldGroup[4].hideExpression = (model: any, formState: any) => {
return formState.mainModel.config.linkItems.filter(linkItem => {
return linkItem.displaySubmenu;
}).length > 0;
};
Метод filter возвращает массив с элементами, которые соответствуют условию. Если один из элементов в linkItems имеет displaySubmenu как true, он будет возвращен в возвращаемом массиве метода filter . Поэтому, когда мы получим длину этого массива, она будет больше 0, что приводит к истинному логическому значению.
Когда в linkItems нет элемента с displaySubmenu, фильтр возврата вернет пустой массив, потому что ни один из элементов не соответствует условию, а длина будет равна 0, что приводит к ложному логическому значению.
Дополнительная информация о методе фильтрации: https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Комментарии:
1. Я также пытался использовать фильтр, проблема, с которой я обнаружил 2 проблемы с этим решением.. Во-первых, если у меня на странице более 1 флажка, все они срабатывают:/ а во-вторых, все поля отображаются, когда displaySubmenus имеет значение false
2. Есть ли у вас пример HTML и как реализация displaySubmenus и hideExpression влияет на флажки?