二维数组排列组合

本文分享了一种解决二维数组元素组合问题的方法,通过递归和reduce函数实现一维数组的生成,适用于任意长度的数组。讨论了从嵌套for到递归和reduce函数的转变,并展示了如何利用这些技术处理多维数组的排列组合问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定如下一个二维数组,进行排列组合,输出如下形式的一维数组。
输入:

[
 	['a', 'b', 'c', ...], 
 	[1, 2, 3, ...], 
 	['x', 'y', 'z', ...],
 	...
 ];

输出

[‘a1x’, ‘a1y’, ‘a1z’, …]

一面遇到的一道面试题,当场蒙圈了,过于紧张,愣是没写出来。

痛定思痛,埋头思考,想到了一种解法,欢迎交流。

如果二维数组只存在两个一维数组,会怎么做呢?
使用嵌套的for

function compose(arr1, arr2) {
    let newArr = [];
    for (let v1 of arr1) {
        for (let v2 of arr2) {
            newArr.push(`${v1}${v2}`);
        }
    }
    return newArr;
}

let newArr = compose(arr[0], arr[1]);

如果二维数组中存在三个一维数组,那么就可以将上次合并的结构和第三个一维数组再次进行合并

let newArr = compose(arr[0], arr[1]);
newArr = compose(newArr, arr[2]);
// 或者
let newArr = compose(compose(arr[0], arr[1]), arr[2]);
// 如果存在4个一维数组
let newArr = compose(compose(compose(arr[0], arr[1]), arr[2]), arr[3]);

以此类推,就可以完成多个一维数组的排列组合。

但是上述方法对于二维数组中存在N个一维数组情况无法实现。因此就需要使用递归来解决这个问题。

function exec(length) {
    if (length <= 2) { // 确定临界值
        return compose(arr[length - 2], arr[length - 1])
    }
    return compose(exec(length - 1), arr[length - 1])
}
const arr = [['a', 'b', 'c'], [1, 2, 3], ['x', 'y', 'z'], [4, 5, 6]];
let newArr = exec(arr.length);

更新于20201231

正好看了redux中对于中间件的组合,萌生了一个新思路。借助于reduce函数的特性实现

let newArr = arr.reduce((pre, cur) => {
    return compose(pre, cur);
});
console.log(newArr);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青菜小王子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值