繁体   English   中英

获取所有可能的对象组合,其中值的总和与数字匹配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM