[英]Get All possible combinations of objects, where sum of values matches number
希望在打字稿中做到这一点。
我有一个对象数组,其中每个对象都有一个名为rating
的属性。 该数组如下所示:
var objects = [{"name":"foo","rating":4}, {"name":"bar","rating":5}, {"name":"foobar","rating":2}]
现在我有一个目标评级, destinationRating
,例如: var destinationRating=11
。 从这些对象中,我需要获取一个数组,比如 20 个key1;key2;key3
形状的字符串,其中key1
等是对象数组中的键,其中所有选定对象的总和至少是destinationRating
。 最少选择 3 个对象。 我不知道我应该如何创建这样一个算法。
如果objects
数组的前 3 个对象与条件匹配,则最终结果应如下所示[0:"0;1;2"]
。
这是一个生成索引的所有组合(只要它们是必要的,请参见输出)并检查给定条件并返回所需结果的提议。
结果集包含具有给定数组索引的字符串,这些索引与命名属性的所需总和相匹配。
function combination(array, property, sum) { function c(part, i) { var result = [], p, s; while (i < n) { p = part.slice(0); p.push(i++); document.write(p + '<br>'); s = p.reduce(function (r, a) { return r + array[a][property]; }, 0); if (s < sum) { result = result.concat(c(p, i)); } if (p.length >= 3 && s === sum) { result.push(p.join(';')); break; } } return result; } var n = array.length; return c([], 0); } var objects = [{ "name": "id0", "rating": 4 }, { "name": "id1", "rating": 5 }, { "name": "id2", "rating": 2 }, { "name": "id3", "rating": 6 }, { "name": "id4", "rating": 8 }, { "name": "id5", "rating": 3 }, { "name": "id6", "rating": 1 }]; document.write('<pre>' + JSON.stringify(combination(objects, 'rating', 11), 0, 4) + '</pre>');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.