0

我觉得这是一个非常简单的问题,但在过去的几个小时里我一直在努力解决这个问题。

    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 并返回 true 或 false 以触发 hideExpression .. 到目前为止,我只设法触发所有页面上的元素或第一个或最后一个元素..

我也尝试过使用 forEach, map 但我觉得我错过了一些非常简单的东西,只是不明白是什么

4

1 回答 1

0

您可以为此使用 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

于 2020-09-18T11:11:46.107 回答