与长度集的数组组合

时间:2017-03-25 09:34:06

标签: javascript

我有一个名为's'的数组现在我需要从这个数组中打印出来 'len'的组合/选项现在我有了这个代码,但我不能打印所有 选项,我不知道最终我需要什么,将打印像ABC,BCD,CDE,ABD,BDE等......

<html>
<head>
    <title>Page Title</title>
    <script src="https://code.jquery.com/jquery-3.1.1.js"></script>
</head>
<body>
<p id="result"></p>
<script type="text/javascript">
    var s = ["A", "B", "C", "D", "E"];
    var len = 2
    for (var i = 0; i < s.length - len + 1; i++) {
        document.getElementById("result").innerHTML = document.getElementById("result").innerHTML + s.slice(i, i + len) + "<br/>";
    }
</script>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

您可以迭代所有元素的树,其中您使用元素进入一个方向,而另一个方向没有实际元素。继续进行,直到临时数组具有所需的长度或者到达数组的最后一个元素。

只返回三个元素。

基本上你需要一个递归函数来检查离开函数。

在这种情况下,有两个

  • 如果临时数组的长度与所需长度匹配,则将temp添加到结果中;

  • 如果index等于带项目的数组的长度;

然后退出该函数并停止递归。

主要部分是开始一个新的递归,一个索引元素,一个没有。

function getCombinations(array, length) {

    function fork(i, t) {                   // recursive fn with index & temp array
        if (t.length === length) {          // check temp length
            result.push(t);                 // push collected values
            return;                         // exit function
        }
        if (i === array.length) {           // check if index is out of range
            return;                         // exit function
        }
        fork(i + 1, t.concat([array[i]]));  // call for with a new letter from index
        fork(i + 1, t);                     // call for without a new letter
    }

    var result = [];                        // for keeping the part results
    fork(0, []);                            // start with index zero and empty temp array
    return result;                          // return result
}

var names = ['anne', 'bert', 'cara', 'dirk', 'eva'],
    result = getCombinations(names, 3);

document.getElementById('out').innerHTML = JSON.stringify(result, 0, 4);
<pre id="out"></pre>

答案 1 :(得分:0)

<p id="demo"></p>

HTML

{{1}}