js 生成笛卡尔积
其实生成 笛卡尔积的方法原本很简单,for循环就可以了,
function discarts() {
//笛卡尔积
var twodDscartes = function (a, b) {
var ret = [];
for (var i = ; i < a.length; i++) {
for (var j = ; j < b.length; j++) {
ret.push(ft(a[i], b[j]));
}
}
return ret;
}
var ft = function (a, b) {
if (!(a instanceof Array))
a = [a];
var ret = a.slice();
ret.push(b);
return ret;
}
//多个一起做笛卡尔积
return (function (data) {
var len = data.length;
if (len == )
return [];
else if (len == )
return data[];
else {
var r = data[];
for (var i = ; i < len; i++) {
r = twodDscartes(r, data[i]);
}
return r;
}
})(arguments.length > ? arguments : arguments[]);
}
调用方式:
var a = discarts([, , , , , , , , , ], [, , , , , , , , , ], [, , , , , , , , , ]);
var a = discarts([['a', 'b', 'c'], [, , , ], ['A', 'B'], ['#', '@', '+'], ['Mary', 'Terry', 'KYO']]);
缺点:
.在有些时候我们需要返回的是一个迭代器,比如要生成10000号码,discarts已经循环了10000次,如果业务需要对着10000个号码需要过滤,那么还需要循环10000次,这样可是不行的哦。
那么修改后的code如下:
this.combins = function () {
if (arguments.length < 2) return arguments[0] || [];
var args = Array.prototype.slice.call(arguments);
var that = {
index: 0,
nth: function (n) {
var result = [],
d = 0;
for (; d < this.dim; d++) {
var l = this[d].length;
var i = n % l;
result.push(this[d][i]);
n -= i;
n /= l;
}
return result;
},
next: function () {
if (this.index >= size) return;
var result = this.nth(this.index);
this.index++;
return result;
}
};
var size = 1;
for (var i = 0; i < args.length; i++) {
size = size * args[i].length;
that[i] = args[i];
}
that.size = size;
that.dim = args.length;
return that;
}
调用code:
var a = combins([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
var index = 0;
while (c = a.next()) {
index++;
console.log(index+1+":"+c.join(''));
}
由于时间关系,比较粗糙,有不当的地方还请大家指正。
js 生成笛卡尔积的更多相关文章
- 利用scrapy-splash爬取JS生成的动态页面
目前,为了加速页面的加载速度,页面的很多部分都是用JS生成的,而对于用scrapy爬虫来说就是一个很大的问题,因为scrapy没有JS engine,所以爬取的都是静态页面,对于JS生成的动态页面都无 ...
- JS生成二维码,允许中文转码
一.使用jquery-qrcode生成二维码 先简单说一下jquery-qrcode,这个开源的三方库(可以从https://github.com/jeromeetienne/jquery-qrcod ...
- js生成随即字符串
js生成随即字符串 /* *js生成随即字符串原来如此简单 *toString() radix argument must be between 2 and 36 */ function uuid() ...
- js生成[n,m]的随机数
一.预备知识 Math.ceil(); //向上取整. Math.floor(); //向下取整. Math.round(); //四舍五入. Math.random(); //0.0 ~ 1 ...
- JS生成随机数的各种函数
第一种方法 /* *@desc:生成随机字符串 *@remark:toString方法可以接收一个基数作为参数的原理,这个基数从2到36封顶.如果不指定,默认基数是10进制 */ function g ...
- js生成当前时间
js生成当前时间 var today=new Date(); function itArray(){ this.length=itArray.arguments.length for(var i=0; ...
- js 生成 yyyy-mm-dd 格式的逼格姿势
关于 js 生成 yyyy-mm-dd 格式,往往都会采取手动拼接,一般不愿意为了小功能而去动用 momentjs 之类的插件. ps: 只分享简单方法,网上有 N 多 dateformat 代码,这 ...
- js生成有缩进的表格
项目中用到用了两天时间想到的,记录下来,如有更好的方法,留言给我,谢谢! js做如下表格: json [{"id":302,"serviceId":15,&qu ...
- 前端学习-使用JS库Leaflet.js生成世界地图并获取标注地址经纬度。
介绍:Leaflet是一个开源的JavaScript库,对移动端友好且对地图有很好的交互性. 大小仅仅只有 33 KB, 同时具有大多数地图所需要的特点. Leaflet设计的非常简单易懂, 同时具有 ...
随机推荐
- Browser设置搜索引擎
Browser设置搜索引擎,在com.android.browser.preferences.GeneralPreferencesFragment中加载R.xml.general_preference ...
- 【树上莫队】【带修莫队】【权值分块】bzoj4129 Haruna’s Breakfast
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using ...
- Cocos2d-x v3.6制作射箭游戏(二)
原文 Cocos2d-x v3.6制作射箭游戏(二) 六 24, 2015by RENSHANin COCOS2D-X 上章我们创建并加载了游戏地图,接下来的两章我们将实现如下的效果. 在开始之前,先 ...
- java里的分支语句--程序运行流程的分类(顺序结构,分支结构,循环结构)
JAVA里面的程序运行流程分三大类: 1,顺序结构:顺序结构就是依次执行每一行代码 2,分支结构:分支结构就是按不同的条件进行分支 3,循环结构:一段代码依条件进行循环执行. 其中,分支结构有两大类: ...
- oracle dblink调用函数
select 用户名.函数名@DBLINK名称(参数) from dual; e.g. select newbosid@TEST('1234ECMA') from dual; -- 成功执行 sel ...
- alert()、confirm()和prompt()的区别
1.警告消息框alertalert 方法有一个参数,即希望对用户显示的文本字符串.该字符串不是 HTML 格式.该消息框提供了一个“确定”按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说,用 ...
- Robberies(HDU2955):01背包+概率转换问题(思维转换)
Robberies HDU2955 因为题目涉及求浮点数的计算:则不能从正面使用01背包求解... 为了能够使用01背包!从唯一的整数(抢到的钱下手)... 之后就是概率的问题: 题目只是给出被抓的 ...
- css3写的实用表单美化
<!DOCTYPE html> <!--[if IE 7 ]> <html lang="en" class="ie7"> & ...
- TSQL的连乘
某个需求需要对某一列的值做乘法,网上搜了把确实还真没有直接的聚合函数用于将某一列的值乘起来. 找到了替代的算法: http://jerryyang-wxy.blogspot.com/2012/04/t ...
- Connect教程系列--响应式布局(一)
微软终于跨平台了,最近在第九频道(Event-Visual Studio)下面出来一系列关于vs2015的视频,介绍vs2015以及.NET5.0的新特性等,现针对其讲解的.NET和ASP.NET,进 ...