希望在打字稿中这样做。
我有一个对象数组,其中每个对象都有一个名为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个选定的对象最小。我不知道如何应用这种算法的创建。
如果[0:"0;1;2"]
数组的前3个对象符合条件,则最终结果应如下objects
。
答案 0 :(得分:1)
这是一个生成索引的所有组合的提议(只要它们是必要的,参见输出)并检查给定的条件并返回想要的结果。
结果集包含具有给定数组的索引的字符串,该索引匹配命名属性的所需总和。
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>');