【发布时间】:2012-11-19 18:40:39
【问题描述】:
努力编写这段代码。
我正在尝试计算 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"
....
建议?
【问题讨论】:
-
当然,您需要做的就是在 S1、S2 和 S3 中找到
Pn的最大值并将它们相加。 -
感谢@MattBurland 的回复。除非最高值只能被一个“S”使用,那么我需要弄清楚哪个“S”使用了“P”
-
@timborden:这很简单。如果
Pn的值仅使用一次,并且在您的集合中多次获得最高值,则只需保留最高值Pn,对于您必须放弃的Sn,选择下一个最高值价值。重复直到满足所有条件。 -
@MattBurland:是的,定点迭代将是必经之路。但是我认为,如果您从
Sn中删除较高的值,则可能会出现更好的结果,因为取而代之的值可能会干扰其他事物并提供更高的结果。 -
@Bergi:实际上,这是一个很好的观点。如果
S中的下一个最高值接近Pn,我可以通过删除最高的Pn来获得更好的结果。您必须遍历Pn的每个实例,并找出哪一个导致的损失最小。
标签: javascript logic