多维For循环

时间:2017-09-07 10:56:36

标签: javascript angularjs arrays

我有三个数组,我需要根据这三个数组创建一组规则,但我正在努力学习如何编写一个函数的逻辑,它将为每个条目提供每个条目的可能组合。阵列。所以,我有,例如:

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解决方案,但不是必需的。

3 个答案:

答案 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+"]")