繁体   English   中英

根据对象数组内的对象条件返回布尔值

[英]return boolean based on object condition inside array of objects

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

    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 包含一个内部有多个对象的 Array,我需要确定每个对象(displaySubmenu)内部的值是否为 true 或 false 并返回 true 或 false 以触发 hideExpression .. 到目前为止,我只能设法触发所有页面上的元素或第一个或最后一个..

我也尝试使用 forEach, map 但我觉得我错过了一些非常简单的东西,只是无法理解

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM