1. 大数组中有m个元素,抽取其中的n个进行组合。
var combination = function(arr, num){ var r=[]; (function f(t,a,n) { if (n==0) { return r.push(t); } for (var i=0,l=a.length; i<=l-n; i++) { f(t.concat(a[i]), a.slice(i+1), n-1); } })([],arr,num); return r; } combination([1,2,3,4],2); //结果"[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]"
2. 多个数组之间的组合
var combine = function(arr){ var sarr = [[]]; for (var i = 0; i < arr.length; i++) { var tarr = []; for (var j = 0; j < sarr.length; j++) for (var k = 0; k < arr[i].length; k++) tarr.push(sarr[j].concat(arr[i][k])); sarr = tarr; } return sarr } combine([[1,2],[3,4],[3]]); //结果"[[1,3,3],[1,4,3],[2,3,3],[2,4,3]]"
项目中用到的组合,在网上搜集了下:)