javascript - 将两个数组合并为所有可能组合的数组的算法

标签 javascript arrays algorithm math functional-programming

JavaScript 中给出的示例:

假设我们有两个数组 [0,0,0] 和 [1,1,1]。生成这两个数组可以组合的所有可能方式的算法是什么。示例:

mergeEveryWayPossible([0,0,0],[1,1,1])
// [ [0,0,0],[1,0,0], [0,1,0], [0,0,1], [1,1,0], [0,1,1], [1,0,1], [1,1,1] ]

将数组合并成一个包含所有可能组合的数组。这与寻找笛卡尔积不同。

我也不确定这种组合叫什么。如果算法或技术有名称,请分享。

最佳答案

您可以将值转换成这种格式的数组

[
    [0, 1],
    [0, 1],
    [0, 1]
]

然后通过迭代外部和内部数组构建一个新的结果集。

var data = [[0, 0, 0], [1, 1, 1]],
    values = data.reduce((r, a, i) => (a.forEach((b, j) => (r[j] = r[j] || [])[i] = b), r), []),
    result = values.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []));
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 将两个数组合并为所有可能组合的数组的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46553575/

相关文章:

javascript - 流程图使用jquery从span获取数据

Java静态数组修改

java - 这个加密函数是可逆的吗?

algorithm - 进一步简化并找到 c1 和 c2 (Big Theta)

javascript - 如何在javascript中用双反斜杠替换反斜杠字符?

javascript - 规避asp事件处理程序

javascript - 从 Json 格式的 Javascript 获取数组值

python - 在python中,如何按元素的频率对列表进行排序

javascript - jQuery DatePicker - 启用特定日期 - 代码不工作

arrays - 仅提取谷歌表格中每个单元格的第一行