繁体   English   中英

递归地结合 object arrays javascript/ typescript

[英]combine object arrays recursively javascript/ typescript

我有 n 个 arrays 结构像

[{val_1: 2}, {val_1: 3}];
[{val_2: 2}];
[{val_3: 1}];

等等

我想创建一个结构像

[{val_1: 2, val_2: 2, val_3: 1}, {val_1: 3, val_2: 2, val_3: 1}]

其中比较了所有 arrays 并产生了每个可能的 output。 在下面的代码中,我有 3 个 arrays。 一个有 4 个值、2 个值和 3 个值。 我希望它返回 24 个不同的 arrays 显示所有可能的组合。

      var val_1 = 3
  var val_2 = 2
  var val_3 = 1
  var total_val = 3;
  var useable = 50;

  var array_1 = new Array();
  var array_2 = new Array();
  var array_3 = new Array();
  var array_1_c = new Array();
  var array_2_c = new Array();
  var array_3_c = new Array();

  for(val_1; val_1 <= total_val && val_1 <= useable; val_1+=1){
    array_1 = [{val_1}];
    array_1.map(test =>{
      return{val_1}
    }).forEach(test => array_1_c.push(test));
  };
  var val_1 = 2
  for(val_1; val_1 >= 0; val_1-=1){
    array_1 = [{val_1}];
    array_1.map(test =>{
      return{val_1}
    }).forEach(test => array_1_c.push(test));
  };

  for(val_2; val_2 <= total_val && val_2 <= useable; val_2+=1){
    array_2 = [{val_2}];
    array_2.map(test =>{
      return{val_2}
    }).forEach(test => array_2_c.push(test));
  };
  for(val_3; val_3 <= total_val && val_3 <= useable; val_3+=1){
    array_3 = [{val_3}];
    array_3.map(test =>{
      return{val_3}
    }).forEach(test => array_3_c.push(test));
  }; console.log(array_1_c);console.log(array_2_c);console.log(array_3_c);

如何完成这样的事情? 置换 function 似乎是通往 go 的方式,但我无法找到通往 output 的每一个组合的方式。 如果创建数百万个组合,我应该使用与使用 object 阵列不同的路线。

谢谢!

您可以通过使用对象的 arrays 来为笛卡尔积采用算法。

结果是一个包含给定数据所有属性的 object 数组。

 const getCartesian = array => array.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => ({...v, ...w }))), [])), all = [[{ val_1: 2 }, { val_1: 3 }], [{ val_2: 2 }], [{ val_3: 1 }]], cartesian = getCartesian(all); console.log(cartesian);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM