javascript - n* 数组中的替代项合并
问题描述
我有一个包含其他几个数组的大数组。例如
let allLines = [['a', 'b'], ['c', 'd', 'e'], ['f', 'g', 'h']];
我需要一个函数来合并数组项并将其可能的组合附加到 textarea 中。他们需要像这样合并:
[a, c, f]
[a, c, g]
[a, c, h]
[a, d, f]
[a, d, g]
[a, d, h]
[a, c, f]
...
所有可能的组合都应在循环中生成并将其附加到 textarea。在这个例子中可能有 18 种组合。我尝试过这样的事情:
let lengths = allLines.map(function(a){return a.length;});
let biggest = Math.max.apply(null, lengths);
a = [];
for (let i = 0; i < allLines.length; i++) {
for (let j = 0; j < biggest; j++) {
if(allLines[i][j] == undefined) {
break;
}
a[i] = allLines[i][j];
}
// console.log(a);
}
有任何想法吗?
解决方案
你可以构建一个笛卡尔积。
const
values = [['a', 'b'], ['c', 'd', 'e'], ['f', 'g', 'h']],
result = values.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []));
result.map(a => console.log(...a));
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- python - OpenCV 读取 MP4 给出所有零帧
- python - 无法在 Kaggle 笔记本上导入数据集包
- node.js - 使用 typescript 使用 data-uri 将图像转换为 base64
- javascript - 理解`const getLayout = Component.getLayout || (页面=>页面)`
- react-native - React Native Material 底部安装错误
- python - Pandas - 滚动平均值给出了一个 NaN 列?
- three.js - 如何在threejs v128+ 中遍历几何的顶点?
- list - 在 ExpansionPanelList.radio 中更改 ListTile 后面的图标颜色
- java - 使用 Java 按字段名称解析 XML
- javascript - Socket IO 检查是否在同一页面中