来自两个对象数组的最便宜的对象值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: { 
   ... },...
 }

如果这是不可行的,因为位置数量太多,或者所有信息都无法预先提供,或者要求昂贵

那么您可能需要考虑一种一次仅遵循一条路径的算法,并且需要能够回溯。

本文链接:https://www.f2er.com/8513.html

大家都在问