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

多数组提取公共唯一值跳过空数组,解决首个数组为空结果异常问题

问题根因

你的原始实现问题出在两方面:

  • 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 16:51:03