介绍Js简单的递归排列组合
2024-10-02
72
最近在开发SKU模块的时候,遇到这样一个需求,某种商品有N(用未知数N来表示是因为规格的数组由用户制定且随时可以编辑的,所以对程序来说,它是一个未知数)类规格,每一类规格又有M个规格值,各种规格值的组合便是一个型号,比如说,颜色是商品规格的一类,可能的值有红、黄、蓝,而尺码是另一类规格,可能的取值有L、M。那它们的规格组合数为:3*2 = 6,如果再另一类规格是版型,分别为修身和宽松,那就有4 * 2 * 2 = 16种组合了。怎样简单高效地求出这些组合呢?
这类问题首先考虑的方法是用递归,但返回之间并没有相互依赖的关系,到底什么时候结束是个问题,用嵌套的循环又会由于数组的维度及深度不得而知而变得困难重重,后来想到使用的是js进行函数递归调用,算法比之前的要精妙很多,用的是函数的递归 而非简单的嵌套for循环,以下看下代码:
function combine(arr) { var r = []; (function f(t, a, n) { if (n == 0) return r.push(t); for (var i = 0; i < a[n-1].length; i++) { f(t.concat(a[n-1][i]), a, n - 1); } })([], arr, arr.length); return r; } var arr = [ ['1','2', '3'], ['a','b', 'c'], ['x','y','z'], ['e','f','g','h', 'i']]; var res = combine(arr);
这是一个对数组进行排列组合的js demo。
更新于:3个月前赞一波!3
相关文章
- 【说站】js isBetween时间点的判断
- 【说站】js isSame判断对象是否相同
- 【说站】js中diff函数的使用
- 【说站】js中isBefore函数如何判断
- 【说站】js中MomentJS构造字符串
- 【说站】js内存的生命周期介绍
- 【说站】js中六种基本数据类型
- 【说站】js如何实现类型判断
- 【说站】js引用计数算法是什么
- 【说站】js原型有哪些规则
- 【说站】凯撒密码python编程简单
- 【说站】js垃圾回收的场景优化
- 【说站】java循环和递归的区别
- 【说站】js执行上下文是什么意思
- 【说站】js函数执行过程的探究
- 【说站】js变量的作用域如何使用
- 【说站】js使用闭包的注意点
- 【说站】js有哪些常用的数组api
- 【说站】js中this的使用场景
- 【说站】js如何对类型进行判断
文章评论
评论问答