从对象获取键值并将其添加到与嵌套值匹配的另一个对象

时间:2020-06-07 00:27:10

标签: javascript angular lodash

我正在使用angular和lodash。 我有两个对象数组。我想做的是从第二个获取vehicle键值,并将其添加到新键consegne内的veicolo的每个对象中。我的目标是检查在steps.location的{​​{1}}内是否有route的{​​{1}}和lat_cliente,是否为真,得到相应的long_cliente键来自consegne的值并将其添加到vehicle的每个对象中,因此最后我可以知道哪个交付分配给了哪种车辆。

我的数组:

consegne:

route

路线:

consenge

在路线数组中

对象数组,我试图用lodash获取对象索引,以检查其中的嵌套数组值(即使也可以使用香草js解决方案)

这是我尝试过的:

consegne = {
    "2020-06-03 14:30:00": [
      {
        "max(a.dataora_ord)": "2020-06-03T11:43:12.508Z",
        id_ordine: 100002,
        id_cliente: "2199",
        id_negozio: "1",
        numero_prodotti: 1,
        importo: 11.3,
        indirizzo_cliente: "VIA BENEDETTO CROCE 1 GUBBIO",
        lat_cliente: 43.3422695,
        long_cliente: 12.5914081,
        lat_negozio: 43.1070321,
        long_negozio: 12.402996209906487
      }
    ],
    "2020-06-04 14:30:00": [
      {
        "max(a.dataora_ord)": "2020-06-04T11:52:38.099Z",
        id_ordine: 100003,
        id_cliente: "2197",
        id_negozio: "1",
        numero_prodotti: 3,
        importo: 67.64,
        indirizzo_cliente: "VIA PIAVE 1 SAN GEMINI",
        lat_cliente: 42.6103269,
        long_cliente: 12.5503077,
        lat_negozio: 43.1070321,
        long_negozio: 12.402996209906487
      }
    ],
    "2020-06-01 11:30:00": [
      {
        "max(a.dataora_ord)": "2020-06-01T08:27:28.467Z",
        id_ordine: 100000,
        id_cliente: "2194",
        id_negozio: "1",
        numero_prodotti: 2,
        importo: 8.71,
        indirizzo_cliente: "PIAZZA BRANDUCCI 1 FOLIGNO",
        lat_cliente: 42.95726165,
        long_cliente: 12.70359885,
        lat_negozio: 43.1070321,
        long_negozio: 12.402996209906487
      }
    ],
    "2020-05-27 10:30:00": [
      {
        "max(a.dataora_ord)": "2020-05-27T07:44:00.000Z",
        id_ordine: 99999,
        id_cliente: "2210",
        id_negozio: "1",
        numero_prodotti: 5,
        importo: 41.79,
        indirizzo_cliente: "LOCALITA' ARVELLO 1 FOLIGNO",
        lat_cliente: 43.0324959,
        long_cliente: 12.8516742,
        lat_negozio: 43.1070321,
        long_negozio: 12.402996209906487
      }
    ],
    ...
  };

这是我的部分成功,但我想我缺少一些东西:

enter image description here

最终结果将是:

  route = [
    {
      vehicle: 1,
      cost: 9438,
      delivery: [1],
      amount: [1],
      pickup: [0],
      service: 420,
      duration: 9438,
      waiting_time: 0,
      distance: 145681,
      steps: [
        {
          type: "job",
          location: [12.5503077, 42.6103269],
          job: 0,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590071446,
          duration: 4766,
          distance: 73086
        }
      ],
      geometry:
        ""
    },
    {
      vehicle: 1,
      cost: 9438,
      delivery: [1],
      amount: [1],
      pickup: [0],
      service: 420,
      duration: 9438,
      waiting_time: 0,
      distance: 145681,
      steps: [
        {
          type: "job",
          location: [12.5503077, 42.6103269],
          job: 0,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590071446,
          duration: 4766,
          distance: 73086
        }
      ],
      geometry:
        ""
    },
    {
      vehicle: 1,
      cost: 6448,
      delivery: [1],
      amount: [1],
      pickup: [0],
      service: 420,
      duration: 6448,
      waiting_time: 0,
      distance: 81974,
      steps: [
        {
          type: "job",
          location: [12.5914081, 43.3422695],
          job: 0,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590069911,
          duration: 3231,
          distance: 40076
        }
      ],
      geometry:
        ""
    },
    {
      vehicle: 1,
      cost: 5066,
      delivery: [1],
      amount: [1],
      pickup: [0],
      service: 420,
      duration: 5066,
      waiting_time: 0,
      distance: 73636,
      steps: [
        {
          type: "job",
          location: [12.70359885, 42.95726165],
          job: 0,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590069018,
          duration: 2338,
          distance: 36148
        }
      ],
      geometry:
        ""
    },
    {
      vehicle: 1,
      cost: 8824,
      delivery: [2],
      amount: [2],
      pickup: [0],
      service: 840,
      duration: 8824,
      waiting_time: 0,
      distance: 137129,
      steps: [
        {
          type: "job",
          location: [12.7224235, 42.9327554],
          job: 1,
          service: 420,
          waiting_time: 0,
          load: [1],
          arrival: 1590069262,
          duration: 2582,
          distance: 42641
        },
        {
          type: "job",
          location: [12.3291318, 43.305996],
          job: 0,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590073531,
          duration: 6431,
          distance: 102982
        }
      ],
      geometry:
        ""
    },
    {
      vehicle: 1,
      cost: 1562,
      delivery: [1],
      amount: [1],
      pickup: [0],
      service: 420,
      duration: 1562,
      waiting_time: 0,
      distance: 16290,
      steps: [
        {
          type: "job",
          location: [12.4418193, 43.133661],
          job: 4,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590067508,
          duration: 828,
          distance: 8181
        }
      ],
      geometry:
        ""
    },
    {
      vehicle: 2,
      cost: 17059,
      delivery: [4],
      amount: [4],
      pickup: [0],
      service: 1680,
      duration: 17059,
      waiting_time: 0,
      distance: 245267,
      steps: [
        {
          type: "job",
          location: [12.5914081, 43.3422695],
          job: 3,
          service: 420,
          waiting_time: 0,
          load: [3],
          arrival: 1590069911,
          duration: 3231,
          distance: 40076
        },
        {
          type: "job",
          location: [12.5407404, 43.1424873],
          job: 1,
          service: 420,
          waiting_time: 0,
          load: [2],
          arrival: 1590072736,
          duration: 5636,
          distance: 74350
        },
        {
          type: "job",
          location: [12.538253, 43.1009005],
          job: 2,
          service: 420,
          waiting_time: 0,
          load: [1],
          arrival: 1590073639,
          duration: 6119,
          distance: 80353
        },
        {
          type: "job",
          location: [12.6476612, 42.5602885],
          job: 0,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590079503,
          duration: 11563,
          distance: 161286
        }
      ],
      geometry:
        ""
    },
    {
      vehicle: 1,
      cost: 4730,
      delivery: [1],
      amount: [1],
      pickup: [0],
      service: 420,
      duration: 4730,
      waiting_time: 0,
      distance: 66605,
      steps: [
        {
          type: "job",
          location: [12.3291318, 43.305996],
          job: 0,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590069017,
          duration: 2337,
          distance: 32457
        }
      ],
      geometry:
        ""
    },
    {
      vehicle: 1,
      cost: 6150,
      delivery: [1],
      amount: [1],
      pickup: [0],
      service: 420,
      duration: 6150,
      waiting_time: 0,
      distance: 90278,
      steps: [
        {
          type: "job",
          location: [12.7592267, 43.0696255],
          job: 0,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590069655,
          duration: 2975,
          distance: 45300
        }
      ],
      geometry:
        ""
    },
    {
      vehicle: 1,
      cost: 2947,
      delivery: [1],
      amount: [1],
      pickup: [0],
      service: 420,
      duration: 2947,
      waiting_time: 0,
      distance: 31642,
      steps: [
        {
          type: "job",
          location: [12.517752, 43.155195],
          job: 0,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590068153,
          duration: 1473,
          distance: 15811
        }
      ],
      geometry:
        ""
    },
    {
      vehicle: 1,
      cost: 12378,
      delivery: [4],
      amount: [4],
      pickup: [0],
      service: 1680,
      duration: 12378,
      waiting_time: 0,
      distance: 178809,
      steps: [
        {
          type: "job",
          location: [12.7020796, 42.9564996],
          job: 11,
          service: 420,
          waiting_time: 0,
          load: [3],
          arrival: 1590069028,
          duration: 2348,
          distance: 36221
        },
        {
          type: "job",
          location: [12.7020796, 42.9564996],
          job: 10,
          service: 420,
          waiting_time: 0,
          load: [2],
          arrival: 1590069448,
          duration: 2348,
          distance: 36221
        },
        {
          type: "job",
          location: [12.649205, 42.5624235],
          job: 8,
          service: 420,
          waiting_time: 0,
          load: [1],
          arrival: 1590074020,
          duration: 6500,
          distance: 91183
        },
        {
          type: "job",
          location: [12.5471666, 42.6143734],
          job: 4,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590075752,
          duration: 7812,
          distance: 107094
        }
      ],
      geometry:
        ""
    },
    {
      vehicle: 2,
      cost: 8513,
      delivery: [4],
      amount: [4],
      pickup: [0],
      service: 1680,
      duration: 8513,
      waiting_time: 0,
      distance: 117438,
      steps: [
        {
          type: "job",
          location: [12.7037126, 42.9575853],
          job: 0,
          service: 420,
          waiting_time: 0,
          load: [3],
          arrival: 1590069044,
          duration: 2364,
          distance: 36287
        },
        {
          type: "job",
          location: [12.7592267, 43.0696255],
          job: 6,
          service: 420,
          waiting_time: 0,
          load: [2],
          arrival: 1590070831,
          duration: 3731,
          distance: 53447
        },
        {
          type: "job",
          location: [12.7803655, 43.2322369],
          job: 5,
          service: 420,
          waiting_time: 0,
          load: [1],
          arrival: 1590072722,
          duration: 5202,
          distance: 74454
        },
        {
          type: "job",
          location: [12.7860033, 43.2321763],
          job: 1,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590073340,
          duration: 5400,
          distance: 75854
        }
      ],
      geometry:
        ""
    },
    {
      vehicle: 3,
      cost: 11843,
      delivery: [4],
      amount: [4],
      pickup: [0],
      service: 1680,
      duration: 11843,
      waiting_time: 0,
      distance: 168496,
      steps: [
        {
          type: "job",
          location: [12.191765, 43.5116042],
          job: 2,
          service: 420,
          waiting_time: 0,
          load: [3],
          arrival: 1590070697,
          duration: 4017,
          distance: 60993
        },
        {
          type: "job",
          location: [12.1659394, 43.5551518],
          job: 9,
          service: 420,
          waiting_time: 0,
          load: [2],
          arrival: 1590071741,
          duration: 4641,
          distance: 67362
        },
        {
          type: "job",
          location: [12.5263973, 43.105579],
          job: 7,
          service: 420,
          waiting_time: 0,
          load: [1],
          arrival: 1590076781,
          duration: 9261,
          distance: 136495
        },
        {
          type: "job",
          location: [12.4302894, 43.0265033],
          job: 3,
          service: 420,
          waiting_time: 0,
          load: [0],
          arrival: 1590078466,
          duration: 10526,
          distance: 152845
        }
      ],
      geometry:
        ""
    }
  ];

如何做到这一点?

这是我的闪电战:

stackblitz

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试

        const vehcord=[]
route.forEach(x=>{
    for(let i=0;i<x.steps.length;i++){
    vehcord.push({vehicle:x.vehicle,location:x.steps[i].location})
    }})

for (let [key, value] of Object.entries(consegne)) {
    vehcord.forEach(vkey=>{
                value.forEach(x=>{
            if(x.long_cliente==vkey.location[0] && x.lat_cliente==vkey.location[1])
                  x.veicolo = vkey.vehicle
                })

      })
  }
  console.log(consegne)