我有三个数组,我需要根据这三个数组创建一组规则,但我正在努力学习如何编写一个函数的逻辑,它将为每个条目提供每个条目的可能组合。阵列。所以,我有,例如:
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 Loop,但我真的不知道从哪里开始。我也查看了地图,但找不到任何深入的例子,所以我不确定地图是否能完成工作。
我要加载的实际数据,第一个数组有2个条目,第二个数组有7个,最后一个数据有6个,所以对于工作我已经完成了应该有84个条目。这是基于(数组3 *数组2)*数组1。
希望一切都有意义我知道它有点令人困惑。另外值得一提的是,我使用的是Angular JS,因此首选角度解决方案或vanilla JS解决方案,但不是必需的。
答案 0 :(得分:1)
您正在寻找的是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
希望它有所帮助!
答案 1 :(得分:1)
嵌套for循环将执行
function arrComb(arr1, arr2, arr3) {
var l1 = arr1.length,
l2 = arr2.length,
l3 = arr3.length,
i, j, k, res = [];
for (i = 0; i < l1; i++) {
for (j = 0; j < l2; j++) {
for (k = 0; k < l3; k++) {
res.push(arr1[i] + '-' + arr2[j] + '-' + arr3[k]);
}
}
}
console.log(res)
}
arrComb([1, 2], [3, 4, 5], [6, 7, 8, 9, 10]);
答案 2 :(得分:1)
更优雅一点:
var array_1 = [1, 2];
var array_2 = [3, 4, 5];
var array_4 = [6, 7, 8, 9, 10];
var result = [];
for (var a1 of array_1)
{
for (var a2 of array_2)
{
for (var a3 of array_4)
{
result.push("\""+a1+"-"+a2+"-"+a3+"\"")
}
}
}
alert("["+result+"]")