我想找到一種方法,將數組中的所有可能性組合到四個百分比之間。找到4個百分點之間的所有可能性
結果想:
possibilities = [[100,0,0,0],[99,1,0,0],[99,0,1,0],...,[0,0,1,99],[0,0,0,100]]
我使用這個功能,但它很慢,似乎並沒有產生所有的可能性。
combinePossibilities : function(a, min, max) {
var deferred = $q.defer();
function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i){
rv['fund'+i] = arr[i];
}
return rv;
}
var fn = function(n, src, got, all) {
if (n === 0) {
if (got.length > 0) {
var total = 0;
angular.forEach(got, function(value){
total += value; //GET TOTAL OF THE COMBINATION
});
if(total === 100){
all.push(toObject(got));
}
}
return;
}
for (var j = 0; j < src.length; j++) {
fn(n - 1, src.slice(j + 1), got.concat([src[j]]), all);
}
return;
};
var all = [];
for (var i = min; i <= max; i++) {
console.log(a);
fn(i, a, [], all);
}
deferred.resolve(all);
return deferred.promise;
}
我在這裏Find all possible subset combos in an array?發現了這個功能,並修改它只需要在我的數組結果等於100%。
任何線索?
謝謝。
你說的所有的可能性呢?像[[0,0,0,0]]到[0,0,0,0]]到[[0,0,1,0]]最終到達[100,100,100,100]? – Ivar
更清楚地定義你的問題。什麼是輸入和什麼是預期的輸出? –
@MattBurland,我想要一個數組的數組,它的所有可能性等於100. results = [[100,0,0,0],[99,1,0,0],...,[95,2 ,1,2],...,[25,25,25,25] ...,[0,0,0,100]。希望我很清楚。 –