多数组提取公共唯一值跳过空数组,解决首个数组为空结果异常问题
问题根因
你的原始实现问题出在两方面:
- reduce没有显式指定初始值,会默认把输入集合的第一个元素作为初始计算值,若第一个数组本身为空,后续计算会直接保留空值
- 空数组判断逻辑嵌套在filter规则中,没有提前把无意义的空数组排除出计算队列,增加了逻辑复杂度
解决方案
提前过滤所有空数组后再执行交集计算,代码兼容所有场景:
// 场景1:原测试用例,中间包含空数组 const a = [1, 2, 3, 4], b = [2, 4], c = [], d = [4]; const result = [a, b, c, d] // 第一步:过滤所有空数组,排除无效输入 .filter(arr => arr.length) // 第二步:计算剩余数组的交集,显式指定初始值避免无有效数组时报错 .reduce((prev, curr) => prev.filter(item => curr.includes(item)), []); console.log(result); // 输出 [4],符合预期 // 场景2:第一个数组为空的测试用例 const e = [], f = [2, 4], g = [4, 6, 8]; const result2 = [e, f, g] .filter(arr => arr.length) .reduce((prev, curr) => prev.filter(item => curr.includes(item)), []); console.log(result2); // 输出 [4],符合预期 // 场景3:所有数组均为空 const result3 = [[], [], []] .filter(arr => arr.length) .reduce((prev, curr) => prev.filter(item => curr.includes(item)), []); console.log(result3); // 输出 []
优势说明
- 逻辑分层清晰,先做无效输入过滤再做核心计算,便于后续维护
- 显式指定reduce初始值,覆盖所有边界场景不会报错
- 无需在filter内部嵌套多条件判断,计算性能更优
内容的提问来源于stack exchange,提问作者benjamin54
相关产品推荐
相关产品推荐

