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

JavaScript数组按索引合并问题:实际输出与预期不符

合并同索引子数组的问题解决

需求与输入示例

我有一个外层数组,需要将同索引位置的子数组合并,例如索引0处最终应变为['0','0','1','2']。

示例输入数组结构:

0:
    0: (2) ['0', '0']
    1: (2) ['0', '0']
    2: (2) ['0', '2']
1:  
    0: ['1']
    1: ['2']
    2: ['2']
2:  
    0: ['2']
    1: ['2']
    2: ['2']

尝试的代码与错误结果

我尝试了以下代码:

var result = outterArray.reduce(function (a, b) {
        return a.map(function (v, i) {
            return [v] + b[i];
        });
      });

得到的错误结果:

0: "0,012"
1: "0,022"
2: "0,222"

期望结果

0: ["0","0","1","2"]
1: ["0","0","2","2"]
2: ["0","2","2","2"]

问题分析与解决方法

错误原因

代码中[v] + b[i]的写法会触发数组的隐式类型转换:数组会被转为字符串后再拼接,比如['0','0'] + ['1']会变成"0,01",最终得到的是拼接后的字符串而非合并后的数组。

正确实现

要合并数组,需使用数组的合并方法,以下两种方式都可以:

方法1:使用concat方法

var result = outterArray.reduce(function(a, b) {
  return a.map(function(v, i) {
    return v.concat(b[i]);
  });
});

方法2:使用ES6扩展运算符(更简洁)

const result = outterArray.reduce((a, b) => 
  a.map((v, i) => [...v, ...b[i]])
);

转为目标字符串格式

如果需要将最终数组转为带方括号的字符串格式,可在结果后再处理:

const stringResult = result.map(arr => JSON.stringify(arr));

执行后得到的结果就是:

0: "[0,0,1,2]"
1: "[0,0,2,2]"
2: "[0,2,2,2]"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:27:13