首页 程序笔记 介绍Js简单的递归排列组合

介绍Js简单的递归排列组合

最近在开发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

站心网

最近在开发SKU模块的时候,遇到这样一个需求,某种商品有N(用未知数N来表示是因为规格的数组由用户制定且..

为您推荐

mysql分表简单介绍

一、Mysql分表的原因1、当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会停在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。2、mysql中有一种机制是表锁定..

一个简单的 C# 异步日志记录器

Clearcove.Logging是一个非常简单的日志库,旨在通过直接许可条款满足大多数日志记录需求。介绍我知道你在想什么——代码世界真的需要另一个日志库吗?如果你在.NET中寻找一个日志库,那么你有很多选择。有NLog,Log..

一个简单的大转盘抽奖程序(附.NetCore Demo源码)

最近闲下来在做一些demo,现在讲一下做的一个简单的大转盘抽奖demo,前端lottery,layui,后端.net core,sqlsugar,数据库用的mysql1.前端实现:前端用的是基于开源的lottery,其中有些改动的,使得前端可以自适应pc端..

C#7.0新语法介绍

一、out输出参数在以前使用out输出参数的时候,必须先定义变量,然后才能使用,例如:先定义一个方法,方法参数是out类型的输出参数:private void DoNoting(out int x, out int y){x = 1;y = 2;}以前版本的写法: /..

简单优雅的Java ORM

Java的ORM框架有很多,但由于Java语言的限制大部分都不够优雅也不够简单,所以作者只能另辟蹊径造轮子了。照旧先看示例代码了解个大概,然后再解释实现原理。一、ORM示例Insertpublic CompletableFuture<Void> inser..

Dapper使用教程

假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上Dapper这款ROM。Dapper的优势: 1、Dapper是一个轻型的ORM类。代码就一个SqlMapper.cs文件,编译后就40K的一个很小的Dll. 2、Dapper很快。Dapper的速度..

主流数据库中间件介绍和对比

目前的数据库中间件有很多,本节将介绍主流的中间件,并从各个维度将其与Mycat进行对比。Mango的中文名是“芒果”,它是一个轻量级的极速数据层访问框架,目前已有十多个大型线上项目在使用它。据称,某一支付系统利..

程序员开发人员常用工具和网站

给大家分享一些程序员开发人员常用工具和网站,我相信这里总有一款工具适合你。排名不分先后~Visual Studio CodeVisual Studio Code官网地址:https://code.visualstudio.com/Visual Studio Code重新定义和优化了代..

类似sms-activate的国外手机验证码接码平台

很多网站需要通过手机验证码才能注册成功,例如最近大火的ChatGPT的官网OpenAI只能使用国外手机号注册。这里推荐几个可以接收国外手机验证码的平台。sms-activatehttps://sms-activate.org/cn站点推荐:ChatGPT手机..

百度文心一言邀请码如何获得?

3月16日下午,百度于北京总部发布了新一代大语言模型、生成式AI产品文心一言。首批用户即可通过邀请测试码,在文心一言官网体验产品,后续将陆续开放给更多用户。邀请码申请方式请往下看。百度文心官网地址:https://..

免费申请SSL证书的网站教程推荐

现在有很多平台可以申请的免费SSL证书让你的网站提供https服务。一些云服务器平台可能也会有一些免费SSL证书的服务。免费SSL证书安全吗?免费SSL证书可以使用,并且在许多情况下是足够安全的。免费SSL证书可以通过Le..

react使用echart图文教程

可以参考ECharts官网的文档:https://echarts.apache.org/handbook/zh/basics/import在React中使用ECharts可以通过以下步骤:安装ECharts库使用npm或者yarn安装ECharts库:npm install echarts --save引入ECharts库..

量化炒股的原理是什么?量化交易策略有哪些?

量化炒股是一种利用计算机程序和数学模型来进行投资决策的方法。它的原理是通过分析历史市场数据、价格走势、技术指标等多种因素,构建数学模型,用以预测未来股市走势和行情。这些模型能够自动执行交易,以实现更高..

头条搜索站长工具网站提交

头条搜索站长平台官网地址:https://zhanzhang.toutiao.com/头条站长是一款提供网站分析和优化建议的工具,可以帮助站长了解其网站的流量情况、用户行为、页面质量等信息,以便对网站进行优化和改进。它的功能和百度..

类似ChatGPT的AI产品有哪些?

在自然语言处理领域,有一些可以替代ChatGPT的工具和框架,以下是一些比较流行的:Transformer-XL:Transformer-XL是由CMU和Google共同开发的自然语言处理模型,具有较好的上下文理解能力和处理长文本的能力。该模型..

echars k线图tooltip formatter没有执行

使用echars生成k线图时,参考官网的示例发现无法修改tooltip的内容,经过研究发现官网示例代码是不正确的。以名为[K 线图刷选]的K线图为例,因为它的示例里有tooltip formatter的实现代码,但是实际上是没有执行的。..

OpenAI发布GPT-4 附注册方法

OpenAI GPT-4官网https://openai.com/research/gpt-4GPT-4官方公告OpenAI团队创建了GPT-4,这是OpenAI在扩大深度学习方面的最新里程碑。GPT-4是一个大型多模态模型(接受图像和文本输入,发出文本输出),虽然在许多..

网站域名年龄对SEO的影响

网站域名年龄对SEO的影响网站域名的年龄可以对搜索引擎优化(SEO)产生影响。一般来说,具有较长历史的域名更容易被搜索引擎认为是可信赖的和有价值的网站。这是因为一个域名在互联网上存在的时间越长,它就越有可能..

AI文本工具网站有哪些?

AI 文本工具是一类利用人工智能技术实现自然语言处理的在线工具。以下是一些常见的 AI 文本工具站,以及它们的简单介绍和官方网址:OpenAI GPT-3 PlaygroundOpenAI GPT-3 Playground 是由 OpenAI 推出的一个在线 AI ..

Quartz.NET-面向.NET的开源作业调度系统

什么是Quartz.NETQuartz.NET是一个流行的开源作业调度框架,可以用于在.NET应用程序中进行作业调度。它是Quartz调度器的.NET实现,提供了高度可定制化的作业调度功能,支持复杂的作业调度需求。Quartz.NET可以让您创..

发表回复

返回顶部