【问题标题】:Merge two javascript object using common properties using node.js使用 node.js 使用公共属性合并两个 javascript 对象
【发布时间】:2023-03-16 12:06:01
【问题描述】:

我有两个对象,它们具有一些类似的键值 osmstartnode 和 osmendnode。我想合并这两个对象并获得具有拥塞级别的新值的最终对象。

第一个对象

var object = [{
    osmstartnode: 370705004,
    osmendnode: 1369956654,
    congestion_level: 1
  },
  {
    osmstartnode: 42469049,
    osmendnode: 42469053,
    congestion_level: 2
  }
];

第二个对象

var roadobjt = [{
    "type": "Feature",
    "geometry": {
      "type": "LineString",
      "coordinates": [
        [-74.0048445, 40.7124759],
        [-74.0048533, 40.71245],
        [-74.0048604, 40.7124243],
        [-74.0048578, 40.7123974],
        [-74.0048468, 40.7123722],
        [-74.0048252, 40.7123472],
        [-74.0045725, 40.7121422]
      ]
    },
    properties: {
      "osmhighway": "motorway_link",
      "osmoneway": "yes",
      "osmwayid": 5669636,
      "osmstartnode": 370705004,
      "osmendnode": 1369956654,
      "speed_mean_mph": 16,
      "pct_from_freeflow": 72,
      "speed_freeflow_mph": 22
    }
  },
  {
    "type": "Feature",
    "geometry": {
      "type": "LineString",
      "coordinates": [
        [-73.99866284812883, 40.59729307801823],
        [-73.99879364640618, 40.59716957964474],
        [-73.99913817998096, 40.596844447960684],
        [-73.99931411513008, 40.596676614430145]
      ]
    },
    properties: {
      "osmname": "Bay Parkway",
      "osmhighway": "primary",
      "osmoneway": "no",
      "osmwayid": 5675398,
      "osmstartnode": 42469049,
      "osmendnode": 42469053,
      "speed_mean_mph": 20,
      "pct_from_freeflow": 67,
      "speed_freeflow_mph": 29
    }
  }
];

【问题讨论】:

  • 请告诉我们您的尝试,我们很乐意帮助您解决具体问题。
  • 你称为object的items其实是一个对象数组
  • 想法(修改合并排序):使用Array.sort 和自定义比较函数,通过osmstartnodeosmendnode 对对两个数组进行排序。然后并行迭代两个数组,并在遇到匹配项时,根据您的规范补充对象。两个数组中当前对象的排序键的顺序告诉你在哪个数组上选择下一个迭代元素。
  • 您是说要将 arr 1 中的对象合并到 arr2 中的对象中,特别是 arr2 对象中的 propperies 对象 - 与 arr1 的索引相同?
  • @developer 是的,我想合并到第二个对象“属性”的嵌套对象中

标签: javascript arrays node.js object


【解决方案1】:

合并使用:

var object = [{
    osmstartnode: 370705004,
    osmendnode: 1369956654,
    congestion_level: 1
  },
  {
    osmstartnode: 42469049,
    osmendnode: 42469053,
    congestion_level: 2
  }
];

进入以下属性:

var roadobjt = [{
    "type": "Feature",
    "geometry": {
      "type": "LineString",
      "coordinates": [
        [-74.0048445, 40.7124759],
        [-74.0048533, 40.71245],
        [-74.0048604, 40.7124243],
        [-74.0048578, 40.7123974],
        [-74.0048468, 40.7123722],
        [-74.0048252, 40.7123472],
        [-74.0045725, 40.7121422]
      ]
    },
    properties: {
      "osmhighway": "motorway_link",
      "osmoneway": "yes",
      "osmwayid": 5669636,
      "osmstartnode": 370705004,
      "osmendnode": 1369956654,
      "speed_mean_mph": 16,
      "pct_from_freeflow": 72,
      "speed_freeflow_mph": 22
    }
  },
  {
    "type": "Feature",
    "geometry": {
      "type": "LineString",
      "coordinates": [
        [-73.99866284812883, 40.59729307801823],
        [-73.99879364640618, 40.59716957964474],
        [-73.99913817998096, 40.596844447960684],
        [-73.99931411513008, 40.596676614430145]
      ]
    },
    properties: {
      "osmname": "Bay Parkway",
      "osmhighway": "primary",
      "osmoneway": "no",
      "osmwayid": 5675398,
      "osmstartnode": 42469049,
      "osmendnode": 42469053,
      "speed_mean_mph": 20,
      "pct_from_freeflow": 67,
      "speed_freeflow_mph": 29
    }
  }
];

使用:

roadobjt.map((r, i) => { r.properties = Object.assign(r.properties, object[i]); return r;})

结果:

[{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-74.0048445,40.7124759],[-74.0048533,40.71245],[-74.0048604,40.7124243],[-74.0048578,40.7123974],[-74.0048468,40.7123722],[-74.0048252,40.7123472],[-74.0045725,40.7121422]]},"properties":{"osmhighway":"motorway_link","osmoneway":"yes","osmwayid":5669636,"osmstartnode":370705004,"osmendnode":1369956654,"speed_mean_mph":16,"pct_from_freeflow":72,"speed_freeflow_mph":22,"congestion_level":1}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-73.99866284812883,40.59729307801823],[-73.99879364640618,40.59716957964474],[-73.99913817998096,40.596844447960684],[-73.99931411513008,40.596676614430145]]},"properties":{"osmname":"Bay Parkway","osmhighway":"primary","osmoneway":"no","osmwayid":5675398,"osmstartnode":42469049,"osmendnode":42469053,"speed_mean_mph":20,"pct_from_freeflow":67,"speed_freeflow_mph":29,"congestion_level":2}}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2023-02-09
    相关资源
    最近更新 更多