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

Javascript 获取所有可能的对象组合,其中值的总和与数字匹配,javascript,arrays,typescript,Javascript,Arrays,Typescript,希望在typescript中实现这一点 我有一个对象数组,其中每个对象都有一个名为rating的属性。阵列看起来是这样的: var objects = [{"name":"foo","rating":4}, {"name":"bar","rating":5}, {"name":"foobar","rating":2}] 现在我有了一个目标评级,destinationRating,例如:var destinationRating=11。从这些对象中,我需要得到一个数组,比如20key1;键2;键

希望在typescript中实现这一点

我有一个对象数组,其中每个对象都有一个名为
rating
的属性。阵列看起来是这样的:

var objects = [{"name":"foo","rating":4}, {"name":"bar","rating":5}, {"name":"foobar","rating":2}]
现在我有了一个目标评级,
destinationRating
,例如:
var destinationRating=11
。从这些对象中,我需要得到一个数组,比如20
key1;键2;键3
形字符串,其中
key1
等是对象数组中的键,其中所有选定对象的总和至少为
destinationRating
。至少3个选定对象。我不知道我该如何着手创建这样一个算法


如果
对象
数组的前3个对象与标准匹配,最终结果应如下所示,
[0:0;1;2”]

这是一个生成所有索引组合(只要它们是必需的,请参见输出)并检查给定条件并返回所需结果的方案

结果集包含具有给定数组的索引的字符串,这些索引与命名属性的所需和匹配

函数组合(数组、属性、和){
职能c(第一部分){
var结果=[],p,s;
而(i');
s=p.reduce(函数(r,a){返回r+array[a][property];},0);
如果(s=3&&s==sum){
结果:推(p.join(“;”);
打破
}
}
返回结果;
}
var n=数组长度;
返回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(“”+JSON.stringify(组合(对象,'rating',11),0,4)+“”)请添加更多的数据和一些示例,源代码和想要的结果应该是什么样子的。您真正想要的是什么?您可能需要重新评估您的实际目标,并采取不同的方法。对于前面提到的问题,一旦您得到至少一个符合要求的对象组合,组合的数量将随着数组的长度呈指数增长。甚至可能不需要20个组合。因此,您没有找到所有可能的组合,而是得到了一组组合,您必须确定其中哪一个组合符合评级标准?听起来您可能可以通过迭代键字符串数组来完成,将每个键字符串拆分为一个包含索引(“键”)的数组,然后使用索引对评级求和(通过循环迭代或使用reduce函数)。既然你在学习,我就故意给你指出正确的方向,而不是给你一个答案。对我列出的概念做一些研究,尝试一个解决方案,然后如果你有困难,发布你尝试的解决方案以及它与预期结果的差异。祝你好运奇怪的是,对于一个大到可以从中进行组合的数据集,总和为6和以下的组合结果为空。。。你能精确地计算出总数吗?也可以考虑一下,最多3个元素…你只需要3个元素?将
if(p.length>=3&&s==sum)
更改为
if(p.length==3&&s==sum)
或跳过长度检查。我现在正在实现此功能以供最终使用,我看到了一些我可以使用的建议。当
sum
太小,无法由3个元素组成时,它最终不会给我任何组合。在这种情况下,我希望它提供至少几个超出
总和的组合。如何编辑此文件以实现此目的?限制仍然是3个元素。如果不能做到这一点,那么我可以解决。我不能给你一些建议,因为这取决于特殊的实现。但是如果你有更具体的问题,请不要犹豫。