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

JavaScript:使用Reduce方法合并多数组结果不符合预期求助

问题分析与解决方案

Let's break down what's going wrong here and fix it step by step.

核心问题:数组相加的行为误解

你的代码里最关键的错误是JavaScript中数组与数组相加(a + e)的行为不是合并数组,而是字符串拼接。

看你的reduce逻辑细节:

  • 你初始化累加器a为一个空数组[]
  • 第一次循环时,e是arr1([5,10,15,20]),执行[] + [5,10,15,20]时,JS会先把两个数组转为字符串(空数组转成"",arr1转成"5,10,15,20"),拼接后得到字符串"5,10,15,20"
  • 后续循环中,a已经是字符串类型,和其他数组相加会持续做字符串拼接,最终输出自然是无方括号的长字符串,而非你期望的数组格式

修正方案:实现数组合并(符合你的期望输出)

如果你想要的是把所有输入数组合并成一个数组(你的期望输出应该是漏写了逗号的笔误),需要用正确的数组合并方式:

方法1:使用Array.concat()

const intersection = (arr) => { 
  return arr.reduce((a,e) => a.concat(e), []) 
}

方法2:使用扩展运算符...

const intersection = (arr) => { 
  return arr.reduce((a,e) => [...a, ...e], []) 
}

调用修正后的函数,会输出符合预期的数组:
[5, 10, 15, 20, 15, 88, 1, 5, 7, 1, 10, 15, 5, 20]


额外提醒:函数名的歧义

注意你的函数名叫intersection,这个词在编程领域通常指数组交集(即同时存在于所有输入数组的元素)。如果这才是你真正的需求,那当前逻辑完全偏离,正确的交集实现如下:

const intersection = (arrays) => {
  // 以第一个数组为基准,筛选出所有数组都包含的元素
  return arrays[0].filter(item => 
    arrays.every(arr => arr.includes(item))
  )
}
// 调用后输出:[5, 15](这两个元素在三个数组中都存在)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:11:33