javascript - 从多个嵌套数组中提取值组合的问题
问题描述
尝试遍历多个嵌套数组以获取新数组中可能值的每个组合。
例子:
[
['a1', 'a2'],
['b1', 'b2'],
['c1', 'c2']
]
输出:
[
['a1'],
['a2'],
['b1'],
['b2'],
['c1'],
['c2'],
['a1', 'b1'],
['a1', 'b2'],
['a1', 'c1'],
['a1', 'c2'],
['a2', 'b1'],
['a2', 'b2'],
['a2', 'c1'],
['a2', 'c2'],
['b1', 'c1'],
['b1', 'c2'],
['b2', 'c1'],
['b2', 'c2']
]
知道如何实现这一点,也许我首先需要拆分数组?
解决方案
您可以使用两个嵌套for
循环和一个参数创建递归函数来保持当前行迭代计数,以便您可以从那里开始下一个 for 循环。
const data = [['a1', 'a2'], ['b1', 'b2'], ['c1', 'c2']]
const res = []
function comb(data, n = 0, prev = []) {
for (var i = n; i < data.length; i++) {
for (var j = 0; j < data[i].length; j++) {
let el = data[i][j]
let arr = prev.concat(el);
if (arr.length <= data[i].length) res.push(arr)
comb(data, i + 1, arr)
}
}
}
comb(data)
console.log(JSON.stringify(res))
推荐阅读
- sql - Oracle SQL 列调整
- algorithm - 数组中两个数字的最大异或和位掩码
- c# - .Net Core Razor OnPost 使用原始值重新加载页面
- python - Plotly Dash:Hex tickformat 中的图表大小问题
- .htaccess - htaccess - 仅响应空白子域
- python - 在 DataFrame Pandas 中将时间列标题与行中的相应日期连接起来
- pandas - 与 folium 中的数据框列相关的颜色
- python - 在字符串中如果有反斜杠,我该如何将其更改为正斜杠
- php - 如何使用最新版本的http离线连接flutter和php mysql?
- r - shinyAPP:更改反应数据集的值