JavaScript数组与JSON响应的比较

时间:2017-04-25 08:53:06

标签: javascript arrays json api compare

我正在进行这个项目,我需要从我学校的时间表中获取所有空房间,以便从JSON响应中获取数据。

JSON响应如下所示:

{
   "status": "success",
   "reservations": [
      {
         "id": "19598",
         "subject": "subjectName",
         "modifiedDate": "2017-04-24T06:04:42",
         "startDate": "2017-04-24T08:00:00",
         "endDate": "2017-04-24T09:45:00",
         "resources": [
            {
               "id": "795",
               "type": "student_group",
               "code": "groupCode",
               "name": "groupName"
            },
            {
               "id": "599",
               "type": "student_group",
               "code": "groupCode",
               "name": "groupName"
            },
            {
               "id": "2989",
               "type": "realization",
               "code": "",
               "name": ""
            },
            {
               "id": "41",
               "type": "room",
               "code": "A340.1",
               "parent": {
                  "id": "2",
                  "type": "building",
                  "code": "A",
                  "name": "buildingA"
               },
               "name": "A340.1"
            }
         ],
         "description": ""
      },
      {
         "id": "27832",
         "subject": "subjectName",
         "modifiedDate": "2017-04-24T06:04:42",
         "startDate": "2017-04-24T08:00:00",
         "endDate": "2017-04-24T09:45:00",
         "resources": [
            {
               "id": "52",
               "type": "room",
               "code": "A450.3",
               "parent": {
                  "id": "2",
                  "type": "building",
                  "code": "A",
                  "name": "buildingA"
               },
               "name": "A450.3"
            },
            {
               "id": "2409",
               "type": "student_group",
               "code": "groupCode",
               "name": "groupName"
            },
            {
               "id": "3401",
               "type": "realization",
               "code": "",
               "name": ""
            }
         ],
         ""
      },
      {
         "id": "10945",
         "subject": "subjectName",
         "modifiedDate": "2017-04-24T06:04:43",
         "startDate": "2017-04-24T08:00:00",
         "endDate": "2017-04-24T12:00:00",
         "resources": [
            {
               "id": "289",
               "type": "student_group",
               "code": "groupCode",
               "name": "gorupName"
            },
            {
               "id": "2454",
               "type": "realization",
               "code": "",
               "name": ""
            },
            {
               "id": "19",
               "type": "room",
               "code": "A510.4",
               "parent": {
                  "id": "2",
                  "type": "building",
                  "code": "A",
                  "name": "buildingA"
               },
               "name": "A510.4"
            }
         ],
         "description": ""
      },
      {
         "id": "27647",
         "subject": "subjectName",
         "modifiedDate": "2017-04-24T06:04:39",
         "startDate": "2017-04-24T08:00:00",
         "endDate": "2017-04-24T21:00:00",
         "resources": [
            {
               "id": "47",
               "type": "room",
               "code": "A420.6",
               "parent": {
                  "id": "2",
                  "type": "building",
                  "code": "A",
                  "name": "buildingA"
               },
               "name": "A420.6"
            }
         ],
         "description": ""
      },
      {
         "id": "20630",
         "subject": "subjectName",
         "modifiedDate": "2017-04-24T06:04:33",
         "startDate": "2017-04-24T08:00:00",
         "endDate": "2017-04-24T10:45:00",
         "resources": [
            {
               "id": "25",
               "type": "room",
               "code": "A130.1",
               "parent": {
                  "id": "2",
                  "type": "building",
                  "code": "A",
                  "name": "buildingA"
               },
               "name": "A130.1"
            },
            {
               "id": "26",
               "type": "room",
               "code": "A130.3",
               "parent": {
                  "id": "2",
                  "type": "building",
                  "code": "A",
                  "name": "buildingA"
               },
               "name": "A130.3"
            },
            {
               "id": "2997",
               "type": "realization",
               "code": "",
               "name": ""
            },
            {
               "id": "2268",
               "type": "student_group",
               "code": "groupCode",
               "name": "gorupName"
            }
         ],
         "description": ""
      },
      {
         "id": "19874",
         "subject": "subjectName",
         "modifiedDate": "2017-04-24T06:04:37",
         "startDate": "2017-04-24T08:00:00",
         "endDate": "2017-04-24T09:45:00",
         "resources": [
            {
               "id": "28",
               "type": "room",
               "code": "A140.2",
               "parent": {
                  "id": "2",
                  "type": "building",
                  "code": "A",
                  "name": "buildingA"
               },
               "name": "140.2"
            },
            {
               "id": "3033",
               "type": "realization",
               "code": "",
               "name": ""
            },
            {
               "id": "2338",
               "type": "student_group",
               "code": "groupCode",
               "name": "groupname"
            }
         ],
         "description": ""
      }
   ]
}

响应时间要长很多,但为了简单起见,我把它缩短了。

所以我通过JSON.Parse()for-loops运行此JSON响应,以获取当前在阵列中使用的所有房间;

var rooms = []; 

for (var i = 0; i < json.reservations.length; i++) {
    if(json.reservations[i].resources != null){
        for(var j = 0; j < json.reservations[i].resources.length; j++){
            var resource = json.reservations[i].resources[j];
            if(resource.type === "room"){
                if(rooms.indexOf("code"))
                    rooms.push(resource.code);
                }
            }
        }
    }
}

我从当时的回复中可以看到当时正在使用的所有房间;例如

"startDate": "2017-04-24T08:00:00",
"endDate": "2017-04-24T09:45:00",

"type": "room",
"code": "A340.1",

但问题是我正在使用的API目前没有空房间的任何数据,所以我还为buildingA中的所有房间制作了一个数组,如下所示:

var buildingA = ['A120.3', 'A130.1', 'A130.3', 'A140.1', 'A140.2', 'A140.4', 'A250.1', 'A240.4', 'A240.2', 'A220.5', 'A220.3',
'A220.1', 'A210.2', 'A320.2', 'A320.6', 'A320.7', 'A320.8', 'A340.1', 'A340.2', 'A350.1', 'A350.3', 'A440.5', 'A450.3',
'A450.1', 'A440.4', 'A440.2', 'A420.6', 'A420.5', 'A420.4', 'A420.2', 'A510.2', 'A520.5', 'A510.4', 'A520.6', 'A520.7',
'A540.1', 'A540.2'];

有什么方法可以将这个数组与var rooms = [];数组进行比较,这样我就可以打印所有空房而不是正在使用的房间?

至于结果,我必须看到空置房间的名称和空置的时间(如果可能的话),但主要的是获得房间名称;

A340.1 - 1 hour 45 minutes
A440.4 - 2 hours

提前致谢。

2 个答案:

答案 0 :(得分:1)

基本上,您可以首先收集预订的房间,然后获得完全免费的房间或免费提供。

&#13;
&#13;
var data = { status: "success", reservations: [{ id: "19598", subject: "subjectName", modifiedDate: "2017-04-24T06:04:42", startDate: "2017-04-24T08:00:00", endDate: "2017-04-24T09:45:00", resources: [{ id: "795", type: "student_group", code: "groupCode", name: "groupName" }, { id: "599", type: "student_group", code: "groupCode", name: "groupName" }, { id: "2989", type: "realization", code: "", name: "" }, { id: "41", type: "room", code: "A340.1", parent: { id: "2", type: "building", code: "A", name: "buildingA" }, name: "A340.1" }], description: "" }, { id: "27832", subject: "subjectName", modifiedDate: "2017-04-24T06:04:42", startDate: "2017-04-24T08:00:00", endDate: "2017-04-24T09:45:00", resources: [{ id: "52", type: "room", code: "A450.3", parent: { id: "2", type: "building", code: "A", name: "buildingA" }, name: "A450.3" }, { id: "2409", type: "student_group", code: "groupCode", name: "groupName" }, { id: "3401", type: "realization", code: "", name: "" }], description: "" }, { id: "10945", subject: "subjectName", modifiedDate: "2017-04-24T06:04:43", startDate: "2017-04-24T08:00:00", endDate: "2017-04-24T12:00:00", resources: [{ id: "289", type: "student_group", code: "groupCode", name: "gorupName" }, { id: "2454", type: "realization", code: "", name: "" }, { id: "19", type: "room", code: "A510.4", parent: { id: "2", type: "building", code: "A", name: "buildingA" }, name: "A510.4" }], description: "" }, { id: "27647", subject: "subjectName", modifiedDate: "2017-04-24T06:04:39", startDate: "2017-04-24T08:00:00", endDate: "2017-04-24T21:00:00", resources: [{ id: "47", type: "room", code: "A420.6", parent: { id: "2", type: "building", code: "A", name: "buildingA" }, name: "A420.6" }], description: "" }, { id: "20630", subject: "subjectName", modifiedDate: "2017-04-24T06:04:33", startDate: "2017-04-24T08:00:00", endDate: "2017-04-24T10:45:00", resources: [{ id: "25", type: "room", code: "A130.1", parent: { id: "2", type: "building", code: "A", name: "buildingA" }, name: "A130.1" }, { id: "26", type: "room", code: "A130.3", parent: { id: "2", type: "building", code: "A", name: "buildingA" }, name: "A130.3" }, { id: "2997", type: "realization", code: "", name: "" }, { id: "2268", type: "student_group", code: "groupCode", name: "gorupName" }], description: "" }, { id: "19874", subject: "subjectName", modifiedDate: "2017-04-24T06:04:37", startDate: "2017-04-24T08:00:00", endDate: "2017-04-24T09:45:00", resources: [{ id: "28", type: "room", code: "A140.2", parent: { id: "2", type: "building", code: "A", name: "buildingA" }, name: "140.2" }, { id: "3033", type: "realization", code: "", name: "" }, { id: "2338", type: "student_group", code: "groupCode", name: "groupname" }], description: "" }] },
    rooms = ['A120.3', 'A130.1', 'A130.3', 'A140.1', 'A140.2', 'A140.4', 'A250.1', 'A240.4', 'A240.2', 'A220.5', 'A220.3', 'A220.1', 'A210.2', 'A320.2', 'A320.6', 'A320.7', 'A320.8', 'A340.1', 'A340.2', 'A350.1', 'A350.3', 'A440.5', 'A450.3', 'A450.1', 'A440.4', 'A440.2', 'A420.6', 'A420.5', 'A420.4', 'A420.2', 'A510.2', 'A520.5', 'A510.4', 'A520.6', 'A520.7', 'A540.1', 'A540.2'],
    booking = Object.create(null),
    free;


data.reservations.forEach(function (reservation) {
    reservation.resources.some(function (resource) {
        if (resource.type === 'room') {
            booking[resource.code] = booking[resource.code] || [];
            booking[resource.code].push({ startDate: reservation.startDate, endDate: reservation.endDate });
            return true;
        }
    });
});

free = rooms.filter(function (a) {
    return !booking[a];
});
 
console.log(booking);
console.log(free);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 1 :(得分:0)

希望以下内容有助于过滤数组。

var vacantRooms = buildingA.filter((x) => {return !rooms.find((y) => {return y == x})});