возвращает логическое значение на основе состояния объекта внутри массива объектов

#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 влияет на флажки?