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

如何用JavaScript高效组合两个数组?能否仅用数组方法实现?

用数组原生方法实现双元素组合生成

要实现将两个数组元素按num-code格式生成所有组合的需求,完全可以只用map、concat或ES6的flatMap等数组原生方法完成,无需使用for循环。以下是两种简洁高效的实现方式:

方法一:map + concat.apply

通过嵌套map生成二维组合数组,再利用concat.apply将二维数组展开为一维:

const combineArrays = (arr1, arr2) => {
  return [].concat.apply([], arr1.map(num => arr2.map(code => `${num}-${code}`)));
};

// 测试示例
const arr1 = [0,1,2,3];
const arr2 = ["AA", "BB"];
console.log(combineArrays(arr1, arr2));
// 输出:["0-AA", "0-BB", "1-AA", "1-BB", "2-AA", "2-BB", "3-AA", "3-BB"]
  • 逻辑说明:外层map遍历arr1的每个数字,内层map遍历arr2的每个编码,拼接成目标格式的字符串,得到一个二维数组;[].concat.apply([], ...)则将二维数组的所有子数组合并为一个一维数组。

方法二:ES6 flatMap(更简洁)

flatMap方法会先执行map操作,再将结果数组扁平化一层,正好适配这个场景:

const combineArrays = (arr1, arr2) => {
  return arr1.flatMap(num => arr2.map(code => `${num}-${code}`));
};

// 测试示例
const arr1 = [0,1,2,3];
const arr2 = ["AA", "BB"];
console.log(combineArrays(arr1, arr2));
  • 逻辑说明:flatMap替代了map加concat的组合操作,直接将内层map生成的子数组展开,代码更简洁直观。

两种方法的时间复杂度均为O(m*n)(m为arr1长度,n为arr2长度),这是生成笛卡尔积的最优复杂度,因为必须遍历所有可能的元素组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:15:34