You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用嵌套循环实现基于JSON Cookie授权状态的判断函数

问题背景

给定如下结构的JSON数据:

[
   {
      "categorySlug":"essential",
      "consents":[
         {
            "consentStatus":"true",
            "label":"Essential cookie"
         }
      ]
   },
   {
      "categorySlug":"tracking",
      "consents":[
         {
            "consentStatus":"true",
            "label":"Tracking cookie"
         }
      ]
   },
   {
      "categorySlug":"marketing",
      "consents":[
         {
            "consentStatus":"true",
            "label":"Marketing cookie 1"
         },
         {
            "consentStatus":"false",
            "label":"Marketing cookie 2"
         },
         {
            "consentStatus":"true",
            "label":"Marketing cookie 3"
         }
      ]
   }
]

其中consentStatus的取值为"true"或"false",需要实现一个函数,根据每个categorySlug下的consentStatus返回对应状态:

  • 若所有consentStatus均为"true",返回'All consents are true';
  • 仅当categorySlug为essential的consentStatus全为"true",且其他分类中存在至少一个consentStatus为"false"时,返回'Essential'。

实现方案

使用数组的every、some、find方法可以更简洁地实现逻辑,避免嵌套forEach的繁琐:

function getConsentStatus(consentCategories) {
  // 检查所有权限是否全为true
  const allConsentsTrue = consentCategories.every(category => 
    category.consents.every(consent => consent.consentStatus === 'true')
  );

  if (allConsentsTrue) {
    return 'All consents are true';
  }

  // 定位essential分类并检查其权限状态
  const essentialCategory = consentCategories.find(cat => cat.categorySlug === 'essential');
  const essentialIsEnabled = essentialCategory?.consents.every(consent => consent.consentStatus === 'true');
  
  // 检查是否存在任何权限为false
  const hasDisabledConsents = consentCategories.some(category => 
    category.consents.some(consent => consent.consentStatus === 'false')
  );

  if (essentialIsEnabled && hasDisabledConsents) {
    return 'Essential';
  }

  // 可根据需求补充其他场景的返回值,比如essential也被禁用的情况
  return 'Unknown';
}

逻辑说明

  1. 全权限开启判断:通过两层every方法,先检查每个分类下的所有权限是否为"true",再确认所有分类都满足这个条件,满足则直接返回对应结果;
  2. 仅Essential开启判断:先找到essential分类,验证其所有权限是否开启;再通过some方法检查是否存在任何权限被禁用;两个条件同时满足时返回'Essential';
  3. 优势:相比嵌套forEach,数组方法更贴合条件判断的需求,代码可读性更强,也更容易维护。

内容的提问来源于stack exchange,提问作者Marius Gardelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:20:17