我有三个数组,我需要基于这三个数组创建一组规则,但我正在努力解决如何编写一个函数的逻辑,该函数将为我提供每个数组中每个条目的每种可能的组合。所以,我有,例如:
var array 1 = [1, 2];
var array 2 = [3, 4, 5];
var array 4 = [6, 7, 8, 9, 10];
而且我不想取回所有可能组合的字符串、对象等(我不会在这里尝试解决)。例如:
var result = ["1-3-6", "2-3-6", "1,4,6"];
等等,到目前为止,我已经尝试坐下来编写一个 For 循环,但我真的不知道从哪里开始。我还查看了 map ,但找不到任何如此深入的示例,所以我不确定 map 是否能完成这项工作。
我想要加载的实际数据,第一个数组有 2 个条目,第二个数组有 7 个条目,最后一个数组有 6 个条目,所以对于我所做的工作,应该有 84 个条目。这是基于 (Array 3 * Array 2) * Array 1。
希望一切都有意义,我知道这有点令人困惑。另外值得一提的是,我使用的是 Angular JS,因此首选 Angular 解决方案或普通 JS 解决方案,但不是必需的。
最佳答案
您正在寻找的是 Cartesian product数组。您可以使用这样的函数(摘自 here ):
function cartesian() {
var r = [], arg = arguments, max = arg.length-1;
function helper(arr, i) {
for (var j=0, l=arg[i].length; j<l; j++) {
var a = arr.slice(0); // clone arr
a.push(arg[i][j]);
if (i==max)
r.push(a);
else
helper(a, i+1);
}
}
helper([], 0);
return r;
}
有很多例子,例如:
JavaScript - Generating combinations from n arrays with m elements
使用递归:
Finding All Combinations of JavaScript array values
Cartesian product of multiple arrays in JavaScript
并且具有多个 (N) 数组:
Combine 2 arrays into 1 in all possible ways in JavaScript
希望对你有帮助!
关于javascript - 多维For循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46094586/