首页 > 解决方案 > 遍历 JSON 响应并将与另一个 JSON 响应匹配的值返回为新的键值

问题描述

我有以下 API 调用返回的值具有 id 值

var sites = 
{
  "response": [
    {
      "id": 1433,
      "name": "Bronx 1",
      "address": "5288 McGlynn Hills",
      "latitude": 51.05,
      "longitude": -114.066,
      "time_zone": "Central Time (US & Canada)",
      "units": "imperial",
      "postal_code": null,
      "city": null,
      "state_province_region": null,
      "country": null,
      "rentable_area_from_lease": null,
      "rentable_area_from_floors": 0,
      "additional_site_common_area": 200,
      "total_site_common_area": 200,
      "site_attributes_url": "/api/1/sites/1433/attributes"
    },
    {
      "id": 1434,
      "name": "Bronx 2",
      "address": "126 Mann Divide",
      "latitude": 51.05,
      "longitude": -114.066,
      "time_zone": "Central Time (US & Canada)",
      "units": "imperial",
      "postal_code": null,
      "city": null,
      "state_province_region": null,
      "country": null,
      "rentable_area_from_lease": null,
      "rentable_area_from_floors": 0,
      "additional_site_common_area": 200,
      "total_site_common_area": 200,
      "site_attributes_url": "/api/1/sites/1434/attributes"
    }
  ]
}

我需要使用上面调用中的 ID 值将其与以下 API 响应 site_id 值进行比较

var floors = 
{
  "response": [
    {
      "id": 118,
      "label": "Crowded floor",
      "managed": true,
      "unusable_area": 0,
      "rentable_area": 100,
      "site_common_area": 50,
      "floor_common_area": 50,
      "assigned_area": 0,
      "image_url": "/GetFloorImage?z=118",
      "site_id": 1433,
      "icon_scale_factor": 0.2,
      "floor_plan_images": [
        {
          "pixel_width": 2048,
          "format": "png",
          "coordinate_scale_factor": 2,
          "url": "http://my-machine/api/1/floors/118/plan_image/2048.png"
        },
        {
          "pixel_width": 4096,
          "format": "png",
          "coordinate_scale_factor": 4,
          "url": "http://my-machine/api/1/floors/118/plan_image/4096.png"
        }
      ],
      "directories": [
        "/api/1/directories/1390"
      ]
    },
    {
      "id": 119,
      "label": "Normal floor",
      "managed": true,
      "unusable_area": 0,
      "rentable_area": 200,
      "site_common_area": 0,
      "floor_common_area": 200,
      "assigned_area": 0,
      "image_url": "/GetFloorImage?z=119",
      "site_id": 1453,
      "icon_scale_factor": 0.7,
      "floor_plan_images": [
        {
          "pixel_width": 2048,
          "format": "png",
          "coordinate_scale_factor": 2,
          "url": "http://my-machine/api/1/floors/119/plan_image/2048.png"
        },
        {
          "pixel_width": 4096,
          "format": "png",
          "coordinate_scale_factor": 4,
          "url": "http://my-machine/api/1/floors/119/plan_image/4096.png"
        }
      ],
      "directories": [
        "/api/1/directories/1391"
      ]
    }
  ],
  "count": 2
}

当 site.id = floor.site_id 我想构建一个新的键值对,如下所示:仅用于匹配的值

var match {floor.id: site.name}

我在循环和返回值时遇到问题,感谢任何帮助

谢谢

标签: javascriptjson

解决方案


嘿@Abdullah Albyati,

我尝试创建您所要求的内容,但实际上并没有那么有用,但它是:

var floors =
{
    "response": [
        {
            "id": 118,
            "label": "Crowded floor",
            "managed": true,
            "unusable_area": 0,
            "rentable_area": 100,
            "site_common_area": 50,
            "floor_common_area": 50,
            "assigned_area": 0,
            "image_url": "/GetFloorImage?z=118",
            "site_id": 1452,
            "icon_scale_factor": 0.2,
            "floor_plan_images": [
                {
                    "pixel_width": 2048,
                    "format": "png",
                    "coordinate_scale_factor": 2,
                    "url": "http://my-machine/api/1/floors/118/plan_image/2048.png"
                },
                {
                    "pixel_width": 4096,
                    "format": "png",
                    "coordinate_scale_factor": 4,
                    "url": "http://my-machine/api/1/floors/118/plan_image/4096.png"
                }
            ],
            "directories": [
                "/api/1/directories/1390"
            ]
        },
        {
            "id": 119,
            "label": "Normal floor",
            "managed": true,
            "unusable_area": 0,
            "rentable_area": 200,
            "site_common_area": 0,
            "floor_common_area": 200,
            "assigned_area": 0,
            "image_url": "/GetFloorImage?z=119",
            "site_id": 1453,
            "icon_scale_factor": 0.7,
            "floor_plan_images": [
                {
                    "pixel_width": 2048,
                    "format": "png",
                    "coordinate_scale_factor": 2,
                    "url": "http://my-machine/api/1/floors/119/plan_image/2048.png"
                },
                {
                    "pixel_width": 4096,
                    "format": "png",
                    "coordinate_scale_factor": 4,
                    "url": "http://my-machine/api/1/floors/119/plan_image/4096.png"
                }
            ],
            "directories": [
                "/api/1/directories/1391"
            ]
        }
    ],
    "count": 2
};

var sites =
{
    "response": [
        {
            "id": 1433,
            "name": "Bronx 1",
            "address": "5288 McGlynn Hills",
            "latitude": 51.05,
            "longitude": -114.066,
            "time_zone": "Central Time (US & Canada)",
            "units": "imperial",
            "postal_code": null,
            "city": null,
            "state_province_region": null,
            "country": null,
            "rentable_area_from_lease": null,
            "rentable_area_from_floors": 0,
            "additional_site_common_area": 200,
            "total_site_common_area": 200,
            "site_attributes_url": "/api/1/sites/1433/attributes"
        },
        {
            // "id": 1434,
            "id": 1453,
            "name": "Bronx 2",
            "address": "126 Mann Divide",
            "latitude": 51.05,
            "longitude": -114.066,
            "time_zone": "Central Time (US & Canada)",
            "units": "imperial",
            "postal_code": null,
            "city": null,
            "state_province_region": null,
            "country": null,
            "rentable_area_from_lease": null,
            "rentable_area_from_floors": 0,
            "additional_site_common_area": 200,
            "total_site_common_area": 200,
            "site_attributes_url": "/api/1/sites/1434/attributes"
        }
    ]
}


var conbined = floors.response.reduce((obj, floor) => {
    var site_id = floor.site_id;
    var site = sites.response.find(site => site.id === site_id);
    if(site) {
        console.log(site.name);
        return { ...obj, floor_site_id: site.name }

    }
    return obj;
}, {});


console.log(conbined);

在您提供的数据中,没有要组合的数据,因此我更改了其中一个 ID。希望这对你有用


推荐阅读