Maison  >  Article  >  interface Web  >  Algorithme de produit cartésien et produit cartésien à tableaux multiples en JS (tutoriel détaillé)

Algorithme de produit cartésien et produit cartésien à tableaux multiples en JS (tutoriel détaillé)

亚连
亚连original
2018-06-22 18:24:162404parcourir

Cet article présente principalement l'algorithme de produit cartésien JS et la méthode d'implémentation de produits cartésiens à tableaux multiples. Il analyse les compétences opérationnelles associées de JavaScript pour générer des produits cartésiens basés sur des objets ou des tableaux sous forme d'exemples. à cela

L'exemple de cet article décrit l'algorithme de produit cartésien JS et la méthode d'implémentation du produit cartésien à tableaux multiples. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

code d'implémentation js de l'algorithme de produit cartésien, génère un produit cartésien basé sur des objets ou des tableaux, et introduit également un exemple javascript de produit cartésien à tableaux multiples comme algorithme de produit cartésien d'implémentation Java et exemple de code.

1. Code d'algorithme de produit cartésien JavaScript

Exemple, générer un produit cartésien basé sur un objet ou un tableau.

//笛卡儿积组合
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;
      }
    }
  }
}

Méthode d'appel :

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

2. JS implémente un produit cartésien à plusieurs tableaux

Exemple :

<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 = [[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;], [1, 2, 3, 4], [&#39;A&#39;, &#39;B&#39;], [&#39;#&#39;, &#39;@&#39;, &#39;+&#39;], [&#39;Mary&#39;, &#39;Terry&#39;, &#39;KYO&#39;]];
var r = multiCartesian(data);
for (var i = 0; i < r.length; i++) {
  dwn("(" + r[i] + ")");
}
</script>

Ce qui précède, c'est moi. Je l'ai compilé pour tout le monde, j'espère qu'il sera utile à tout le monde à l'avenir.

Articles connexes :

Introduction détaillée à l'utilisation de ref ($refs) dans Vue.js

Interprétation détaillée du père- son communication dans vue

Comment implémenter le composant clavier numérique à l'aide de Vue

Comment déployer https à l'aide de nginx + node

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn