努力编写此代码。
我正在尝试计算2个对象的最高值。我开始单独的“S”和“P”对象:
var S = [
{ id: '1', value: '##' },
{ id: '2', value: '##' },
{ id: '3', value: '##' },
{ id: 'N', value: '##' }
];
var P = [
{ id: '1', value: '##' },
{ id: '2', value: '##' },
{ id: '3', value: '##' },
{ id: 'N', value: '##' }
];
我创建了第三个对象:
var myobject = {
'S1' = {
'P1' = '25',
'P2' = '32',
'P3' = '65',
'PN' = '##'
},
'S2' = {
'P1' = '24',
'P2' = '31',
'P3' = '64',
'PN' = '##'
},
'S3' = {
'P1' = '26',
'P2' = '33',
'P3' = '66',
'PN' = '##'
},
'SN' = {
'P1' = '##',
'P2' = '##',
'P3' = '##',
'PN' = '##'
}
};
我需要遍历所有值以查看组合产生的最高值,例如:
S1.P1 + S2.P1 + S3.P1 = ?
S1.P1 + S2.P1 + S3.P2 = ?
S1.P1 + S2.P1 + S3.P3 = ?
S1.P1 + S2.P2 + S3.P1 = ?
S1.P1 + S2.P2 + S3.P2 = ?
S1.P1 + S2.P2 + S3.P3 = ?
...
我正在寻找的答案,使用上面的示例值:
S1.P3 + S2.P3 + S3.P3 = 195
为了使事情复杂化,在某些情况下,“P”值只能在等式中使用一次:
var P = [
{ id: '1', value: '##' },
{ id: '2', value: '##' },
{ id: '3', value: '##', once: true },
{ id: 'N', value: '##' }
];
如果“P3”只能使用一次,那么我正在寻找的答案,使用上面的示例值:
S1.P2 + S2.P2 + S3.P3 = 129;
我猜测需要一点递归......但我的头疼。
修改
我在试图创建计算的循环中迷路了,例如:
foreach "S"
foreach "P"
foreach "S"
foreach "P"
....
建议?
答案 0 :(得分:6)
对于任何a + b > a + c
和所有a
的{{1}},您不能仅从b > c
,S1
,{{{{}}获得最大值1}} ...并将它们加在一起?
我不确定我完全理解你在做什么,但这应该有助于避免过多的递归。
答案 1 :(得分:0)
谢谢你们......我想我有一些有用的东西。
我将对象更改为:
var myobject = {
'S1-P1' = '25',
'S1-P2' = '32',
'S1-P3' = '65',
'S1-PN' = '##'
'S2-P1' = '24',
'S2-P2' = '31',
'S2-P3' = '64',
'S2-PN' = '##'
'S3-P1' = '26',
'S3-P2' = '33',
'S3-P3' = '66',
'S3-PN' = '##'
'SN-P1' = '##',
'SN-P2' = '##',
'SN-P3' = '##',
'SN-PN' = '##'
};
...并通过这个来运行:
ids = [];
_.each(S, function(Sn){
ids.push(Sn.id);
});
var totals = [];
while (ids.length){
var best = { s_id: null, p_id: null, amount: 0 };
for (var s1 in myobject) {
if (best.amount < myobject[s1]){
id = s1.split('-');
best = { s_id: id[0], p_id: id[1], amount: myobject[s1] };
}
}
var once = false;
_.each(P, function(Pn){
if (Pn.id == best.p_id & Pn.once)
once = true;
});
for (var s2 in myobject) {
id = s2.split('-');
if (best.s_id == id[0])
delete myobject[s2];
if (once && best.p_id == id[1])
delete myobject[s2];
}
var index = ids.indexOf(best.s_id);
ids.splice(index, 1);
totals.push(best);
}
console.log(totals);
....似乎有效。