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 相关文章推荐
jquery实现的鼠标拖动排序Li或Table
May 04 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
May 17 Javascript
详解webpack异步加载业务模块
Jun 23 Javascript
knockoutjs模板实现树形结构列表
Jul 31 Javascript
BootStrap实现文件上传并带有进度条效果
Sep 11 Javascript
详解react服务端渲染(同构)的方法
Sep 21 Javascript
jQuery实现动态控制页面元素的方法分析
Dec 20 jQuery
jQuery扩展方法实现Form表单与Json互相转换的实例代码
Sep 05 jQuery
vue 使用vue-i18n做全局中英文切换的方法
Oct 29 Javascript
javascript的this关键字详解
May 20 Javascript
JS内置对象和Math对象知识点详解
Apr 03 Javascript
JavaScript 监听组合按键思路及代码实现
Jul 28 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实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
jquery 选择器部分整理
2009/10/28 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
2019/05/28 jQuery
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
[01:29:17]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
启动targetcli时遇到错误解决办法
2017/10/26 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
python批量修改文件编码格式的方法
2018/05/31 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
佳能英国官方网站:Canon UK
2017/08/08 全球购物
zooplus波兰:在线宠物店
2019/07/21 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
用友笔试题目
2016/10/25 面试题
料理师求职信
2014/01/30 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
2015年保送生自荐信
2015/03/24 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技