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设计的非常简单易懂, 同时具有 ...
随机推荐
- [VBS脚本]定时提示并关闭计算机
一.Natalia.bat 双击这个文件可以运行Natalia 控制台在打开后会变成最小化,标题为PowerAssistant,黑色背景淡绿色文字 运行脚本Natalia.vbs @ECHO OFF ...
- require.js 使用博客
没时间写博客,又觉得这篇很不错,或许以后能用到,只能copy与点赞: Javascript模块化编程(三):require.js的用法 作者: 阮一峰 日期: 2012年11月 7日 这个系列的第 ...
- 找出单链表的倒数第K个(从1开始计数)结点的值
typedef struct Link { int data; struct Link* next; }NODE,*pNODE; NODE *searchK(NODE *phead, int k) { ...
- 关于collapsed margin(外边距合并)
这是前面写postion定位时写到最后面的例子的时候发现的一个问题,于是专门写一篇随笔来解释记录一下,毕竟两个知识点同时写在一篇文章里面有点混乱的感觉.. 上篇随笔position定位遇到的问题在这里 ...
- WordPaster.exe安装教程
安装教程: Firefox控件安装教程 Chrome控件安装教程 Chrome 45+控件安装教程 相关问题: 提示Runtime Error错误 360拦截 Chrome启用npapi Fire ...
- [Leetcode][JAVA] Pascal's Triangle I, II
Pascal's Triangle: Given numRows, generate the first numRows of Pascal's triangle. For example, give ...
- Python操作memcached及redis
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- International Conference in 2014
International Conference on Machine Learning (ICML2014, Beijing).(papers are available) Neural Infor ...
- 安装SQL Server 2008 R2 Enterprise错误:'' is not a valid login or you do not have permission
今天安装SQL Server时遇到一个恶心的Bug. ------------------------------------------------------------------------- ...
- slick-pg v0.1.5 发布
这个版本的更新主要是: 增加了对 json 的支持 (PostgreSQL 9.3 正式版已经发布了,所以我适时加入了对 pg json 的支持.功能其实前两个星期就已经开发测试好了,但公司跟联邦政府 ...