如何用嵌套循环实现基于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'; }
逻辑说明
- 全权限开启判断:通过两层
every方法,先检查每个分类下的所有权限是否为"true",再确认所有分类都满足这个条件,满足则直接返回对应结果; - 仅Essential开启判断:先找到
essential分类,验证其所有权限是否开启;再通过some方法检查是否存在任何权限被禁用;两个条件同时满足时返回'Essential'; - 优势:相比嵌套
forEach,数组方法更贴合条件判断的需求,代码可读性更强,也更容易维护。
内容的提问来源于stack exchange,提问作者Marius Gardelli
相关产品推荐
相关产品推荐

