具有n个元素javascript的数组的子集

时间:2014-07-03 14:46:38

标签: javascript arrays

我正在尝试编写一个将数组和n作为参数的函数,

它将返回具有n个元素的该数组的所有子集,尝试了几件事,但还没有成功。

感谢无论谁把它放在这里,这个函数太复杂而且不能完成这项工作,基本上我在这里尝试做的是从4元素数组中挑出一个元素来创建它的3个元素子集。它甚至不以N为参数。它返回所有3个元素子集,但也返回相同的子集,所以我也必须将它们过滤掉,无论如何我都会继续尝试。

function findSubsets(array) { 
    var answers = []; 
    var firstArray = array; 
    for (i = 0; i < array.length; i++) { 
       array = firstArray; 
       for (var k = 0; k < array.length; k++) { 
          if (k != i) { 
              var subset = array.splice(k, 1); 
              answers.push(array); array.splice(k, 0, subset[0]);
          } 
       }
    } 
}

2 个答案:

答案 0 :(得分:1)

这并不像看起来那么复杂。这个是优化的,因为它在此过程中不会创建无用的临时数组。

function findSubsets(array, n) { 
    var answers = []; 
    for(var i = 0 ; i < array.length ; i += n) {
        answers.push(array.slice(i, i + n));
    }
    return answers;
}

findSubsets([1, 2, 3, 4, 5, 6, 7, 8, 9], 2) // --> [[1, 2], [3, 4], [5, 6], [7, 8], [9]]
findSubsets([1, 2, 3, 4, 5, 6, 7, 8, 9], 3) // --> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

答案 1 :(得分:1)

您可以尝试此解决方案

var subsetArray = (function() {
  return {
    getResult: getResult
  }

  function getResult(array, n) {

    function isBigEnough(value) {
      return value.length === n;
    }

    var ps = [
      []
    ];
    for (var i = 0; i < array.length; i++) {
      for (var j = 0, len = ps.length; j < len; j++) {
        ps.push(ps[j].concat(array[i]));
      }
    }
    return ps.filter(isBigEnough);
  }
})();

var arr = [1,2,3,4,5,6,7,8,9]; 的console.log(subsetArray.getResult(ARR,2));