好的,所以这可能看起来很简单,但不知何故我在这里没有得到想要的结果。我有两个这样的对象:
来自两个对象数组的最便宜的对象值javascript 对于一对旅程的简单情况,您不需要回溯工作原理当然,您必须在中间添加全套有效性标准。如果要测试的可能性总数很大,这将不起作用如果每个位置的选项数量很大,你甚至无法做到这一点如果这是不可行的,因为位置数量太多,或者所有信息都无法预先提供,或者要求昂贵
•
问答
escapeyu 回答:来自两个对象数组的最便宜的对象值javascript 对于一对旅程的简单情况,您不需要回溯工作原理当然,您必须在中间添加全套有效性标准。如果要测试的可能性总数很大,这将不起作用如果每个位置的选项数量很大,你甚至无法做到这一点如果这是不可行的,因为位置数量太多,或者所有信息都无法预先提供,或者要求昂贵
对于一对旅程的简单情况,您不需要回溯
为了避免为您完成整个任务并破坏学习体验,我提供了一个可以产生输出的结构。您需要做的就是填写使一对腿成为有效往返所需的正确条件。
工作原理
在这样一个有限规模的任务中,你可以列举所有的可能性,然后选择总价最小的那个。
这里是通过两个嵌套的 .forEach 循环实现的。
同时,您可以跟踪“迄今为止的最低总价格”,以及达到该价格的那对腿。为此,从一个空对象开始。在循环的最里面,您将测试的价格与迄今为止的最低价格进行比较。如果它超过迄今为止的最低价格(或者还没有任何最低价格,因为这是第一次循环),则将其存储为迄今为止的新最低价格。
祝你工作顺利!
const legs = {
"outbound": [{
"id": 1,"ferryCompany": "Grimaldi","departureCity": "NAPOLI","arrivalCity": "ROTTERDAM","ticketPrice": 15
},{
"id": 2,"ferryCompany": "MSC","ticketPrice": 20
},{
"id": 3,"departureCity": "HAMBURG","ticketPrice": 25
},{
"id": 4,"ticketPrice": 30
},{
"id": 5,"arrivalCity": "MARSELLA","ticketPrice": 30
}
],"inbound": [{
"id": 11,"departureCity": "ROTTERDAM","arrivalCity": "NAPOLI","ticketPrice": 50
},{
"id": 12,{
"id": 13,"arrivalCity": "HAMBURG",{
"id": 14,{
"id": 15,"ticketPrice": 30
}
]
}
const lowest = {}
legs.outbound.forEach(outboundLeg => {
legs.inbound.forEach(inboundLeg => {
if (outboundLeg.departureCity === inboundLeg.arrivalCity
// Add more conditions here
) {
price = outboundLeg.ticketPrice + inboundLeg.ticketPrice
if (!lowest.price || price < lowest.price) {
lowest.price = price;
lowest.outboundLeg = outboundLeg
lowest.inboundLeg = inboundLeg
}
}
})
})
console.log(lowest)
当然,您必须在中间添加全套有效性标准。
我只放了一个,让你开始。
如果要测试的可能性总数很大,这将不起作用
例如,有 10 个旅程阶段,每个阶段有 10 个选项,原则上您将测试 10**10 条可能的路径,这将非常耗时。
因此,您可能会将腿部信息更改为字典,其关键字是“我从哪里开始”,其中包含从该点开始的一系列旅程选项。这样,您就可以从任何给定节点快速获取您可以去往哪些节点的列表。
然后你可以列举所有的可能性,如果每个中间点的可能性数量不是太多。
如果每个位置的选项数量很大,你甚至无法做到这一点
例如,如果旅程有 10 段路程,并且(假设)每个城市有 10 个可能的出站选项,那么这仍然是 10**10 种不可能的组合。
在这种情况下,您可能希望保留以下内容的字典:
{
"place I can get to at some stage": {
// info about cheapest way to get there
"path": [leg1,leg2,leg3 etc.],"totalPrice": 55
},"another place I can get to at some stage: {
... },...
}
如果这是不可行的,因为位置数量太多,或者所有信息都无法预先提供,或者要求昂贵
那么您可能需要考虑一种一次仅遵循一条路径的算法,并且需要能够回溯。