从数组中获取所有元素

时间:2017-06-15 07:48:13

标签: javascript php

我希望从数组中获取3个元素混合。 示例:

var arr = ['a', 'b', 'c'];

result : 
['a', 'a', 'a']
['a', 'a', 'b']
['a', 'a', 'c']
['a', 'b', 'a']
['a', 'b', 'b']
['a', 'b', 'c']
['a', 'c', 'a']
['a', 'c', 'b']
['a', 'c', 'c']

['b', 'a', 'a']
['b', 'a', 'b']
['b', 'a', 'c']
['b', 'b', 'a']
['b', 'b', 'b']
['b', 'b', 'c']
['b', 'c', 'a']
['b', 'c', 'b']
['b', 'c', 'c']

['c', 'a', 'a']
['c', 'a', 'b']
['c', 'a', 'c']
['c', 'b', 'a']
['c', 'b', 'b']
['c', 'b', 'c']
['c', 'c', 'a']
['c', 'c', 'b']
['c', 'c', 'c']

请帮帮我!我尝试了很多方法仍然没有成功。 非常感谢!

2 个答案:

答案 0 :(得分:1)

使用3个嵌套for循环,它将迭代每个位置的元素。

var arr = ['a', 'b', 'c'];

for (var i = 0; i < arr.length; i++) {
  for (var j = 0; j < arr.length; j++) {
    for (var k = 0; k < arr.length; k++) {
      console.log([arr[i], arr[j], arr[k]])
    }
  }
}

一种递归方法,适用于任意长度的数组。

var arr = ['a', 'b', 'c'];

function gen(arr, subArr) {
  // iterate over the elements for nth position
  for (var i = 0; i < arr.length; i++) {
    // check currently iterating for the last element
    if (subArr.length == arr.length - 1)
      // concat ith element with the array
      console.log(arr1.concat(arr[i]))
    else
      // otherwise recursively call the function
      gen(arr, subArr.concat(arr[i]))
  }
}

// call the function
gen(arr, []);

答案 1 :(得分:1)

您可以使用具有退出条件的递归方法来检查所需大小的长度。

此功能适用于任意长度。请注意,结果的长度为array.length size

function getCombinations(array, size) {

    function fork(t) {
        var i;

        if (t.length === size) {
            result.push(t);
            return;
        }
        for (i = 0; i < array.length; i++) {
            fork(t.concat([array[i]]));
        }
    }

    var result = [];
    fork([]);
    return result;
}

console.log(getCombinations(['a', 'b', 'c'], 3));
.as-console-wrapper { max-height: 100% !important; top: 0; }