JavaScript array comparison with JSON response

喜夏-厌秋 提交于 2019-12-10 10:59:44

问题


I have this project I'm working on and I need to get all the vacant rooms from my school's timetable where I get my data from a JSON response.

The JSON response looks like this:

{
   "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": ""
      }
   ]
}

The response is a lot longer but I've kept it shorter for simplicity's sake.

So I've run this JSON response through with JSON.Parse() and for-loops to get all the rooms that all currently in use in an array;

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);
                }
            }
        }
    }
}

I get all the rooms that are being used at the time as you can see from the response above for example;

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

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

But the problem is that the API that I'm using doesn't contain any data for the vacant rooms at the moment so I also made an array for all the rooms in the buildingA which looks like this:

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'];

Is there any way I could compare this array to the var rooms = []; array so I could print all the vacant rooms instead of the ones being in use?

As for the results I would have to see the name of the vacant room and the time how long it stays vacant (if possible) but the main thing would be to get the room name for example;

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

Thanks in advance.


回答1:


Basically, you could collect first the rooms which are booked and then get either completely free rooms or render free times.

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }



回答2:


Hope the below helps in filtering the array.

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


来源:https://stackoverflow.com/questions/43605904/javascript-array-comparison-with-json-response

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!