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 相关文章推荐
javascript动画效果类封装代码
Aug 28 Javascript
收集的一些Array及String原型对象的扩展实现代码
Dec 05 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
Jul 13 Javascript
jQuery客户端分页实例代码
Nov 18 Javascript
JavaScript中神奇的call()方法
Mar 12 Javascript
JavaScript实现自动消除按钮功能的方法
Aug 05 Javascript
浅谈JavaScript中的string拥有方法的原因
Aug 28 Javascript
jQuery+Pdo编写login登陆界面
Aug 01 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
Feb 19 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
Mar 06 Javascript
微信小程序wepy框架笔记小结
Aug 08 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
Sep 13 Javascript
利用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生成数组的使用示例 php全组合算法
2014/01/16 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
WAF的正确bypass
2017/01/05 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
替换python字典中的key值方法
2018/07/06 Python
使用Python处理BAM的方法
2018/09/28 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
HTML table 表格边框的实现思路
2019/10/12 HTML / CSS
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
飞利浦法国官网:Philips法国
2019/07/10 全球购物
什么是Assembly(程序集)
2014/09/14 面试题
如何获得EntityManager
2014/02/09 面试题
土木工程专业个人求职信
2013/12/05 职场文书
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
读书活动总结范文
2014/04/26 职场文书
党员个人公开承诺书
2014/08/29 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
劳模事迹材料范文
2014/12/24 职场文书
解析CSS 提取图片主题色功能(小技巧)
2021/05/12 HTML / CSS