如何通过reduce判断含数组属性的filters对象是否存在非空数组
实现方案
你可以通过reduce方法实现这个需求,核心逻辑是遍历所有数组,只要找到一个非空数组就返回true,否则保持false。
简洁版实现
const hasActiveFilters = Object.values(filters).reduce((acc, currentArr) => acc || currentArr.length > 0, false);
带提前终止优化的实现(更高效)
const hasActiveFilters = Object.values(filters).reduce((acc, currentArr) => { // 已经找到非空数组,直接返回true,跳过后续遍历 if (acc) return acc; // 检查当前数组是否包含元素 return currentArr.length > 0; }, false);
逻辑说明
- 初始值设为
false,表示默认没有激活的筛选器 - 遍历
filters的所有值(数组):- 如果累加器
acc已经是true,直接返回true,避免多余计算 - 否则判断当前数组的长度是否大于0,将结果作为新的累加器值
- 如果累加器
补充说明
其实用Array.some()方法会更直观(虽然你指定用reduce),写法如下:
const hasActiveFilters = Object.values(filters).some(arr => arr.length > 0);
some方法会在找到第一个满足条件的元素后立即终止遍历,性能和带优化的reduce版本一致,代码更简洁。
内容的提问来源于stack exchange,提问作者cbdeveloper
相关产品推荐
相关产品推荐

