从数组值生成笛卡尔积对象

时间:2017-10-26 09:53:18

标签: javascript algorithm design-patterns

我正在构建一些对象数组,这些对象来自某些数组中条目的排列。我对代码的第一次尝试是在下面,它应该有助于说明我想要实现的目标:

permutationsArray = (array1, array2, array3) => {
  const arrayOfObjects = [];
    for (let i = 0; i < array1.length; i++) {
      for (let j = 0; j < array2.length; j++) {
        for (let k = 0; k < array3.length; k++) {
          arrayOfObjects.push({
            aConstant: 'some constant',
            key1: array1[i],
            key2: array2[j],
            key3: array3[k],
          });
        }
      }
    }
  return arrayOfObjects;
};

我真的不满意嵌套for循环来实现这一目标。我看过的替代方案是:

  • 使用嵌套映射并展平创建的树
  • 尝试类似于this solution here
  • 的递归系统

我正在寻找关于我是否朝着正确的方向解决这个问题的意见。理想情况下,我希望能够提供尽可能多的数组。

我遇到的一个大问题是如何使用递归来命名键。

1 个答案:

答案 0 :(得分:3)

首先,这不是permutations的问题,而是Cartesian product

set理论中(通常,在数学的其他部分),Cartesian product数学操作,返回{ {1}}来自多个

enter image description here

您可以使用mapreduce方法等set功能来实现这一目标。

ES6