JS笛卡尔积算法与多重数组笛卡尔积实现方法示例


Posted in Javascript onDecember 01, 2017

本文实例讲述了JS笛卡尔积算法与多重数组笛卡尔积实现方法。分享给大家供大家参考,具体如下:

js 笛卡尔积算法的实现代码,据对象或者数组生成笛卡尔积,并介绍了一个javascript多重数组笛卡尔积的例子,以及java实现笛卡尔积的算法与实例代码。

一、javascript笛卡尔积算法代码

例子,根据对象或者数组生成笛卡尔积。

//笛卡儿积组合
function descartes(list) {
  //parent上一级索引;count指针计数
  var point = {};
  var result = [];
  var pIndex = null;
  var tempCount = 0;
  var temp = [];
  //根据参数列生成指针对象
  for (var index in list) {
    if (typeof list[index] == 'object') {
      point[index] = {
        'parent': pIndex,
        'count': 0
      }
      pIndex = index;
    }
  }
  //单维度数据结构直接返回
  if (pIndex == null) {
    return list;
  }
  //动态生成笛卡尔积
  while (true) {
    for (var index in list) {
      tempCount = point[index]['count'];
      temp.push(list[index][tempCount]);
    }
    //压入结果数组
    result.push(temp);
    temp = [];
    //检查指针最大值问题
    while (true) {
      if (point[index]['count'] + 1 >= list[index].length) {
        point[index]['count'] = 0;
        pIndex = point[index]['parent'];
        if (pIndex == null) {
          return result;
        }
        //赋值parent进行再次检查
        index = pIndex;
      } else {
        point[index]['count']++;
        break;
      }
    }
  }
}

调用方法:

var result = descartes({'aa':['a','b','c','d'],'bb':['$','%','^','&']});
alert(result);//result就是笛卡尔积

二、js实现多重数组笛卡尔积

例子:

<script>
(function() {
  dwn = function(a) {
    document.writeln(a + "<br />")
  };
  //笛卡尔积
  var Cartesian = function(a, b) {
    var ret = [];
    for (var i = 0; i < a.length; i++) {
      for (var j = 0; 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 = Array.call(null, a);
    ret.push(b);
    return ret;
  }
  //多个一起做笛卡尔积
  multiCartesian = function(data) {
    var len = data.length;
    if (len == 0) return [];
    else if (len == 1) return data[0];
    else {
      var r = data[0];
      for (var i = 1; i < len; i++) {
        r = Cartesian(r, data[i]);
      }
      return r;
    }
  }
})();
var data = [['a', 'b', 'c'], [1, 2, 3, 4], ['A', 'B'], ['#', '@', '+'], ['Mary', 'Terry', 'KYO']];
var r = multiCartesian(data);
for (var i = 0; i < r.length; i++) {
  dwn("(" + r[i] + ")");
}
</script>

为加深对笛卡尔积的理解,这里推荐一篇java笛卡尔积的方法教程:https://3water.com/article/129585.htm,大家可以参考下。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
纯js实现的论坛常用的运行代码的效果
Jul 15 Javascript
js实现俄罗斯方块小游戏分享
Jan 31 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
Mar 25 Javascript
第八篇Bootstrap下拉菜单实例代码
Jun 21 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
Aug 02 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
Dec 13 Javascript
关于不同页面之间实现参数传递的几种方式讨论
Feb 13 Javascript
JavaScript中清空数组的三种方式
Mar 22 Javascript
Vue.js弹出模态框组件开发的示例代码
Jul 26 Javascript
详解Vue单元测试Karma+Mocha学习笔记
Jan 31 Javascript
微信小程序Echarts覆盖正常组件问题解决
Jul 13 Javascript
vue表单验证之禁止input输入框输入空格
Dec 03 Vue.js
利用JS测试目标网站的打开响应速度
Dec 01 #Javascript
Vue-Access-Control 前端用户权限控制解决方案
Dec 01 #Javascript
javascript按顺序加载运行js方法
Dec 01 #Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
Dec 01 #Javascript
javascript Function函数理解与实战
Dec 01 #Javascript
React Native react-navigation 导航使用详解
Dec 01 #Javascript
分析JS单线程异步io回调的特性
Dec 01 #Javascript
You might like
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
Python遍历指定文件及文件夹的方法
2015/05/09 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
Python登录注册验证功能实现
2018/06/18 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
大学生活学习的自我评价
2013/12/03 职场文书
三年大学生活自我鉴定
2014/01/21 职场文书
会计求职简历自我评价
2015/03/10 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
2015年英语教师工作总结
2015/05/20 职场文书