JavaScript time comparison with arrays - javascript
I'm working on a project where I need to get all the vacant classrooms for the day and basically filter out the ones being in use.
I get all the data from the school's own API with JSON response body that looks like this:
{
"status": "success",
"reservations": [
{
"id": "18935",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:04:51",
"startDate": "2017-04-27T11:00:00",
"endDate": "2017-04-27T13:00:00",
"resources": [
{
"id": "50",
"type": "room",
"code": "A440.5",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A440.5"
},
{
"id": "2995",
"type": "realization",
"code": "",
"name": ""
},
{
"id": "2267",
"type": "student_group",
"code": "",
"name": ""
}
],
"description": ""
},
{
"id": "20362",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:05:05",
"startDate": "2017-04-27T11:00:00",
"endDate": "2017-04-27T14:00:00",
"resources": [
{
"id": "51",
"type": "room",
"code": "A450.1",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A450.1"
},
{
"id": "2402",
"type": "student_group",
"code": "",
"name": ""
},
{
"id": "3064",
"type": "realization",
"code": "",
"name": ""
}
],
"description": ""
},
{
"id": "20237",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:05:05",
"startDate": "2017-04-27T11:15:00",
"endDate": "2017-04-27T13:00:00",
"resources": [
{
"id": "45",
"type": "room",
"code": "A420.4",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A420.4"
},
{
"id": "2433",
"type": "student_group",
"code": "",
"name": ""
},
{
"id": "3058",
"type": "realization",
"code": "",
"name": ""
}
],
"description": ""
},
{
"id": "20888",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:04:57",
"startDate": "2017-04-27T13:15:00",
"endDate": "2017-04-27T16:00:00",
"resources": [
{
"id": "62",
"type": "room",
"code": "A520.5",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A520.5"
},
{
"id": "3092",
"type": "realization",
"code": "",
"name": ""
},
{
"id": "2444",
"type": "student_group",
"code": "",
"name": ""
}
],
"description": ""
},
{
"id": "22586",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:04:48",
"startDate": "2017-04-27T13:15:00",
"endDate": "2017-04-27T17:00:00",
"resources": [
{
"id": "52",
"type": "room",
"code": "A450.3",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A450.3"
},
{
"id": "3004",
"type": "realization",
"code": "",
"name": ""
},
{
"id": "2294",
"type": "student_group",
"code": "",
"name": ""
},
{
"id": "525",
"type": "student_group",
"code": "",
"name": ""
}
],
"description": ""
},
{
"id": "18816",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:04:58",
"startDate": "2017-04-27T13:15:00",
"endDate": "2017-04-27T16:00:00",
"resources": [
{
"id": "41",
"type": "room",
"code": "A340.1",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A340.1"
},
{
"id": "2989",
"type": "realization",
"code": "",
"name": ""
},
{
"id": "795",
"type": "student_group",
"code": "",
"name": ""
},
{
"id": "599",
"type": "student_group",
"code": "",
"name": ""
}
],
"description": ""
},
{
"id": "20431",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:04:56",
"startDate": "2017-04-27T13:15:00",
"endDate": "2017-04-27T16:00:00",
"resources": [
{
"id": "40",
"type": "room",
"code": "A320.7",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A320.7/8"
},
{
"id": "2416",
"type": "realization",
"code": "",
"name": ""
},
{
"id": "2386",
"type": "student_group",
"code": "",
"name": ""
}
],
"description": ""
},
{
"id": "18588",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:04:49",
"startDate": "2017-04-27T13:15:00",
"endDate": "2017-04-27T16:00: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": "2979",
"type": "realization",
"code": "",
"name": ""
},
{
"id": "582",
"type": "student_group",
"code": "",
"name": ""
}
],
"description": ""
},
{
"id": "18940",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:04:53",
"startDate": "2017-04-27T13:15:00",
"endDate": "2017-04-27T16:00:00",
"resources": [
{
"id": "2996",
"type": "realization",
"code": "",
"name": ""
},
{
"id": "2267",
"type": "student_group",
"code": "",
"name": ""
},
{
"id": "2268",
"type": "student_group",
"code": "",
"name": ""
},
{
"id": "31",
"type": "room",
"code": "A210.2",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A210.2"
}
],
"description": ""
},
{
"id": "12041",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:04:53",
"startDate": "2017-04-27T14:15:00",
"endDate": "2017-04-27T17:00:00",
"resources": [
{
"id": "2510",
"type": "realization",
"code": "",
"name": ""
},
{
"id": "775",
"type": "student_group",
"code": "",
"name": ""
},
{
"id": "23",
"type": "room",
"code": "A520.7",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A520.7"
}
],
"description": ""
},
{
"id": "24630",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:05:05",
"startDate": "2017-04-27T14:15:00",
"endDate": "2017-04-27T17:00:00",
"resources": [
{
"id": "3277",
"type": "realization",
"code": "",
"name": ""
},
{
"id": "42",
"type": "room",
"code": "A340.2",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A340.2"
}
],
"description": ""
},
{
"id": "27205",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:05:07",
"startDate": "2017-04-27T14:15:00",
"endDate": "2017-04-27T17:00:00",
"resources": [
{
"id": "35",
"type": "room",
"code": "A240.2",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A240.2"
},
{
"id": "775",
"type": "student_group",
"code": "",
"name": ""
},
{
"id": "3384",
"type": "realization",
"code": "",
"name": ""
}
],
"description": ""
},
{
"id": "25917",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:05:00",
"startDate": "2017-04-27T15:15:00",
"endDate": "2017-04-27T16:00:00",
"resources": [
{
"id": "36",
"type": "room",
"code": "A240.4",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A240.4"
},
{
"id": "593",
"type": "realization",
"code": "",
"name": ""
},
{
"id": "595",
"type": "student_group",
"code": "",
"name": ""
}
],
"description": ""
},
{
"id": "21932",
"subject": "subjectName",
"modifiedDate": "2017-04-27T06:05:06",
"startDate": "2017-04-27T16:00:00",
"endDate": "2017-04-27T18:00:00",
"resources": [
{
"id": "43",
"type": "room",
"code": "A350.1",
"parent": {
"id": "2",
"type": "building",
"code": "A",
"name": "buildingA"
},
"name": "A350.1"
},
{
"id": "2464",
"type": "student_group",
"code": "",
"name": ""
},
{
"id": "2747",
"type": "student_group",
"code": "",
"name": ""
}
],
"description": ""
}
]
}
In order to get the JSON response I need to put startDate (the moment user searches the vacant rooms, in this situation it is: 2017-04-27T10:55) and endDate (set to end of the day, 2017-04-27T22:00). The result for this query is the JSON response above.
The problem is that the API I'm using doesn't contain any data for the vacant rooms but only for the ones booked for certain times so I made a list of all the rooms in the building and compared it to the booked ones to filter them out:
var 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'];
var data = JSON.parse(responseText);
var booking = Object.create(null);
var 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(free);
Results:
A210.3
A220.5
A320.2
A520.6
A510.4
This only returns the ones that are not being used at all during the day but I need to get the ones that are vacant for hour or two.
For this booked class for example:
"startDate": "2017-04-27T13:15:00",
"endDate": "2017-04-27T16:00:00",
"type": "room",
"code": "A520.5"
for this I would need to print out:
A520.5 - 2 hours 20 minutes
So I need to get the room / time from the startDate of the search (2017-04-27T10:55) and compare it to the startDate of the booked room (2017-04-27T13:15:00) to get the time remaining for that room to be vacant.
TO CLARIFY:
I have all the data for booked rooms starting from 2017-04-27T10:55
until 2017-04-27T22:00 as you can see from the JSON response above.
I need to somehow compare the startDate of the JSON query when the user
searches for the rooms (2017-04-27T10:55) and compare it to the booked
rooms startDate to get the time how long the room stays vacant.
This is how I'm doing my startDate and endDate for the JSON query:
// Timestamp needs to be formed (YYYY-MM-DDTxx:xx) in order for JSON query to work
var todaysDate = new Date();
function convertDate(date) {
var yyyy = date.getFullYear().toString();
var mm = (date.getMonth() + 1).toString();
var dd = date.getDate().toString();
var mmChars = mm.split('');
var ddChars = dd.split('');
return yyyy + '-' + (mmChars[1] ? mm : "0" + mmChars[0]) + '-' + (ddChars[1] ? dd : "0" + ddChars[0]);
}
// Current time when user searches for vacant rooms
var currentTime = new Date();
var time = "T" + currentTime.getHours() + ":" + currentTime.getMinutes();
// variables for the JSON query
var startDate = convertDate(todaysDate) + time;
var endDate = convertDate(todaysDate) + ("T22:00");
// JSON-query
var getRooms = {
"startDate": startDate,
"endDate": endDate
};
Related
How to loop through an array of objects to find a user's id?
how can I loop through this JSON in JavaScript and check whether a user's id exists? This data is from an image annotation collection and I am going to need to prevent a user from editing someone else's annotations. In this example, lets just say that user id I am looking for is K2Lb1R7owqR9BYmpJAJzrg6w1s92 from the creator: key. I tried using for example arr.includes() but didn't work for me. What is my expected output? I think for now I need to just worry whether a user's id exists or not and if so, return false or true. The creator object will always be present inside the body. Thank you for your help. [{ "body": [{ "created": "2020-07-03T11:49:32.058Z", "purpose": "commenting", "value": "don't move me", "creator": { "id": "0qbvzjI3llhyIrKVO6PZxcZUSiI2", "name": "testme" }, "type": "TextualBody" }, { "purpose": "tagging", "value": "move", "creator": { "name": "testme", "id": "0qbvzjI3llhyIrKVO6PZxcZUSiI2" }, "type": "TextualBody", "created": "2020-07-03T11:49:30.850Z" }], "id": "IRCJPsz4NKkiuhVLE1hR", "photoDocId": "92wNwz2aaqy7CWf3mGo1", "#context": "http://www.w3.org/ns/anno.jsonld", "type": "Annotation", "target": { "source": "https://firebasestorage.googleapis.com/v0/b/vue-photoapp-api.appspot.com/o/photos%2Fmountains-hero.jpg?alt=media&token=fbe93188-d13d-4a7f-a472-4a529aa565a0", "selector": { "conformsTo": "http://www.w3.org/TR/media-frags/", "type": "FragmentSelector", "value": "xywh=pixel:582.6087036132812,114.49275207519531,98.55072021484375,189.85508728027344" } } }, { "body": [{ "purpose": "commenting", "type": "TextualBody", "creator": { "name": "doss", "id": "K2Lb1R7owqR9BYmpJAJzrg6w1s92" }, "value": "anyone ever climb this mountain top?", "created": "2020-07-03T10:57:40.590Z" }, { "creator": { "id": "K2Lb1R7owqR9BYmpJAJzrg6w1s92", "name": "doss" }, "purpose": "tagging", "value": "ridge", "type": "TextualBody", "created": "2020-07-03T10:57:39.351Z" }, { "value": "i did in 2005", "created": "2020-07-03T10:59:45.318Z", "type": "TextualBody", "creator": { "name": "testme", "id": "0qbvzjI3llhyIrKVO6PZxcZUSiI2" }, "purpose": "commenting" }, { "type": "TextualBody", "created": "2020-07-03T10:59:43.966Z", "purpose": "tagging", "value": "testme", "creator": { "id": "0qbvzjI3llhyIrKVO6PZxcZUSiI2", "name": "testme" } }, { "type": "TextualBody", "purpose": "replying", "value": "test", "creator": { "name": "doss", "id": "K2Lb1R7owqR9BYmpJAJzrg6w1s92" }, "created": "2020-07-03T11:39:18.860Z" }], "type": "Annotation", "#context": "http://www.w3.org/ns/anno.jsonld", "photoDocId": "92wNwz2aaqy7CWf3mGo1", "target": { "selector": { "value": "xywh=pixel:247.82608032226562,73.91304016113281,233.33334350585938,240.57972717285156", "conformsTo": "http://www.w3.org/TR/media-frags/", "type": "FragmentSelector" }, "source": "https://firebasestorage.googleapis.com/v0/b/vue-photoapp-api.appspot.com/o/photos%2Fmountains-hero.jpg?alt=media&token=fbe93188-d13d-4a7f-a472-4a529aa565a0" }, "id": "IlI7SRjFm8qohmHDLBw2" }]
You can make use of flatMap to get flat data in array then using some to find out whether the value is present or not: var array=[{ "body": [{ "created": "2020-07-03T11:49:32.058Z", "purpose": "commenting", "value": "don't move me", "creator": { "id": "0qbvzjI3llhyIrKVO6PZxcZUSiI2", "name": "testme" }, "type": "TextualBody" }, { "purpose": "tagging", "value": "move", "creator": { "name": "testme", "id": "0qbvzjI3llhyIrKVO6PZxcZUSiI2" }, "type": "TextualBody", "created": "2020-07-03T11:49:30.850Z" }], "id": "IRCJPsz4NKkiuhVLE1hR", "photoDocId": "92wNwz2aaqy7CWf3mGo1", "#context": "http://www.w3.org/ns/anno.jsonld", "type": "Annotation", "target": { "source": "https://firebasestorage.googleapis.com/v0/b/vue-photoapp-api.appspot.com/o/photos%2Fmountains-hero.jpg?alt=media&token=fbe93188-d13d-4a7f-a472-4a529aa565a0", "selector": { "conformsTo": "http://www.w3.org/TR/media-frags/", "type": "FragmentSelector", "value": "xywh=pixel:582.6087036132812,114.49275207519531,98.55072021484375,189.85508728027344" } }}, { "body": [{ "purpose": "commenting", "type": "TextualBody", "creator": { "name": "doss", "id": "K2Lb1R7owqR9BYmpJAJzrg6w1s92" }, "value": "anyone ever climb this mountain top?", "created": "2020-07-03T10:57:40.590Z" }, { "creator": { "id": "K2Lb1R7owqR9BYmpJAJzrg6w1s92", "name": "doss" }, "purpose": "tagging", "value": "ridge", "type": "TextualBody", "created": "2020-07-03T10:57:39.351Z" }, { "value": "i did in 2005", "created": "2020-07-03T10:59:45.318Z", "type": "TextualBody", "creator": { "name": "testme", "id": "0qbvzjI3llhyIrKVO6PZxcZUSiI2" }, "purpose": "commenting" }, { "type": "TextualBody", "created": "2020-07-03T10:59:43.966Z", "purpose": "tagging", "value": "testme", "creator": { "id": "0qbvzjI3llhyIrKVO6PZxcZUSiI2", "name": "testme" } }, { "type": "TextualBody", "purpose": "replying", "value": "test", "creator": { "name": "doss", "id": "K2Lb1R7owqR9BYmpJAJzrg6w1s92" }, "created": "2020-07-03T11:39:18.860Z" }], "type": "Annotation", "#context": "http://www.w3.org/ns/anno.jsonld", "photoDocId": "92wNwz2aaqy7CWf3mGo1", "target": { "selector": { "value": "xywh=pixel:247.82608032226562,73.91304016113281,233.33334350585938,240.57972717285156", "conformsTo": "http://www.w3.org/TR/media-frags/", "type": "FragmentSelector" }, "source": "https://firebasestorage.googleapis.com/v0/b/vue-photoapp-api.appspot.com/o/photos%2Fmountains-hero.jpg?alt=media&token=fbe93188-d13d-4a7f-a472-4a529aa565a0" }, "id": "IlI7SRjFm8qohmHDLBw2"}]; var result = array.flatMap(elem=>elem.body).some(user=>user.creator.id==='K2Lb1R7owqR9BYmpJAJzrg6w1s92'); console.log(result); some will return either true or false, which is what you need here. I hope this helps.
You can make use of the some function: const data = [{"body":[{"created":"2020-07-03T11:49:32.058Z","purpose":"commenting","value":"don't move me","creator":{"id":"0qbvzjI3llhyIrKVO6PZxcZUSiI2","name":"testme"},"type":"TextualBody"},{"purpose":"tagging","value":"move","creator":{"name":"testme","id":"0qbvzjI3llhyIrKVO6PZxcZUSiI2"},"type":"TextualBody","created":"2020-07-03T11:49:30.850Z"}],"id":"IRCJPsz4NKkiuhVLE1hR","photoDocId":"92wNwz2aaqy7CWf3mGo1","#context":"http://www.w3.org/ns/anno.jsonld","type":"Annotation","target":{"source":"https://firebasestorage.googleapis.com/v0/b/vue-photoapp-api.appspot.com/o/photos%2Fmountains-hero.jpg?alt=media&token=fbe93188-d13d-4a7f-a472-4a529aa565a0","selector":{"conformsTo":"http://www.w3.org/TR/media-frags/","type":"FragmentSelector","value":"xywh=pixel:582.6087036132812,114.49275207519531,98.55072021484375,189.85508728027344"}}},{"body":[{"purpose":"commenting","type":"TextualBody","creator":{"name":"doss","id":"K2Lb1R7owqR9BYmpJAJzrg6w1s92"},"value":"anyone ever climb this mountain top?","created":"2020-07-03T10:57:40.590Z"},{"creator":{"id":"K2Lb1R7owqR9BYmpJAJzrg6w1s92","name":"doss"},"purpose":"tagging","value":"ridge","type":"TextualBody","created":"2020-07-03T10:57:39.351Z"},{"value":"i did in 2005","created":"2020-07-03T10:59:45.318Z","type":"TextualBody","creator":{"name":"testme","id":"0qbvzjI3llhyIrKVO6PZxcZUSiI2"},"purpose":"commenting"},{"type":"TextualBody","created":"2020-07-03T10:59:43.966Z","purpose":"tagging","value":"testme","creator":{"id":"0qbvzjI3llhyIrKVO6PZxcZUSiI2","name":"testme"}},{"type":"TextualBody","purpose":"replying","value":"test","creator":{"name":"doss","id":"K2Lb1R7owqR9BYmpJAJzrg6w1s92"},"created":"2020-07-03T11:39:18.860Z"}],"type":"Annotation","#context":"http://www.w3.org/ns/anno.jsonld","photoDocId":"92wNwz2aaqy7CWf3mGo1","target":{"selector":{"value":"xywh=pixel:247.82608032226562,73.91304016113281,233.33334350585938,240.57972717285156","conformsTo":"http://www.w3.org/TR/media-frags/","type":"FragmentSelector"},"source":"https://firebasestorage.googleapis.com/v0/b/vue-photoapp-api.appspot.com/o/photos%2Fmountains-hero.jpg?alt=media&token=fbe93188-d13d-4a7f-a472-4a529aa565a0"},"id":"IlI7SRjFm8qohmHDLBw2"}] console.log(data.some(({body}) => body.some(({creator}) => creator.id === 'K2Lb1R7owqR9BYmpJAJzrg6w1s92')));
Indexing last number of a JSON Object
So I have a JSON object, here it is: { "868": { "header": "New limited", "lite": "1337 Gaming Headset", "icon": "", "items": { "Stock": "1,337", "Price": "R$750" }, "extra": { "product": 25355494 }, "url": "", "id": 868, "added": 1438542256903 }, "869": { "header": "New Face", "lite": "Furious George", "icon": "", "items": { "Price": "R$200" }, "extra": { "product": 25355932 }, "url": "", "id": 869, "added": 1438543456863 }, "870": { "header": "Almost sold out", "lite": "1337 Gaming Headset", "icon": "", "items": { "Stock": "1,337", "Remaining": "133", "Price": "R$750" }, "extra": { "product": 25355494 }, "url": "", "id": 870, "added": 1438544588831 }, "871": { "header": "Sold out", "lite": "1337 Gaming Headset", "icon": "", "items": { "Price": "R$750" }, "extra": { }, "url": "", "id": 871, "added": 1438544704049 }, "872": { "header": "New Hat", "lite": "Elite Spy Eye", "icon": "", "items": { "Price": "R$250" }, "extra": { "product": 25356879 }, "url": "", "id": 872, "added": 1438545677167 } } I want to know how to index the last thing of this json object. I can't describe it any more but it might be the key. I want to basically index the last object in the object, so that would be the bit where it says "872":{"header":"New Hat" near the bottom So basically it's the biggest number I want to index. I already tried to index the last one with [4] as an index but it came up with undefined.
I suppose that you might want this: var str = '{"868":{"header":"New limited","lite":"1337 Gaming Headset","icon":"","items":{"Stock":"1,337","Price":"R$750"},"extra":{"product":25355494},"url":"","id":868,"added":1438542256903},"869":{"header":"New Face","lite":"Furious George","icon":"","items":{"Price":"R$200"},"extra":{"product":25355932},"url":"","id":869,"added":1438543456863},"870":{"header":"Almost sold out","lite":"1337 Gaming Headset","icon":"","items":{"Stock":"1,337","Remaining":"133","Price":"R$750"},"extra":{"product":25355494},"url":"","id":870,"added":1438544588831},"871":{"header":"Sold out","lite":"1337 Gaming Headset","icon":"","items":{"Price":"R$750"},"extra":{},"url":"","id":871,"added":1438544704049},"872":{"header":"New Hat","lite":"Elite Spy Eye","icon":"","items":{"Price":"R$250"},"extra":{"product":25356879},"url":"","id":872,"added":1438545677167}}'; var obj = JSON.parse(str); var last = Object.keys(obj).sort(function(a, b) { return parseInt(b) - parseInt(a); })[0]; // suppose to be "872" in this case console.log('"' + last + '": ' + JSON.stringify(obj[last]));
var json = { "868": { "header": "New limited", "lite": "1337 Gaming Headset", "icon": "", "items": { "Stock": "1,337", "Price": "R$750" }, "extra": { "product": 25355494 }, "url": "", "id": 868, "added": 1438542256903 }, "869": { "header": "New Face", "lite": "Furious George", "icon": "", "items": { "Price": "R$200" }, "extra": { "product": 25355932 }, "url": "", "id": 869, "added": 1438543456863 }, "870": { "header": "Almost sold out", "lite": "1337 Gaming Headset", "icon": "", "items": { "Stock": "1,337", "Remaining": "133", "Price": "R$750" }, "extra": { "product": 25355494 }, "url": "", "id": 870, "added": 1438544588831 }, "871": { "header": "Sold out", "lite": "1337 Gaming Headset", "icon": "", "items": { "Price": "R$750" }, "extra": {}, "url": "", "id": 871, "added": 1438544704049 }, "872": { "header": "New Hat", "lite": "Elite Spy Eye", "icon": "", "items": { "Price": "R$250" }, "extra": { "product": 25356879 }, "url": "", "id": 872, "added": 1438545677167 } } var keys = Object.keys(json); var last = keys[keys.length - 1]; document.write('"' + last + '": ' + JSON.stringify(json[last]));
How to remove JSON header?
i have following JSON: { "folder": [ { "$": { "id": "471841542", "name": "Manajemen Pemasaran", "description": "", "user_id": "186868958", "shared": "1", "shared_link": "https://www.box.com/s/b0nupgg8boe25nyfz781", "permissions": "kcfgtedopnhsuvy", "size": "2258167", "file_count": "5", "created": "1352203782", "updated": "1352260971" }, "tags": [ {} ] }, { "$": { "id": "469509910", "name": "C++", "description": "", "user_id": "186868958", "shared": "1", "shared_link": "https://www.box.com/s/byyidt02k4sglbuvxlw3", "permissions": "kcfgtedopnhsuvy", "size": "1322331", "file_count": "128", "created": "1352101667", "updated": "1352203670" }, "tags": [ {} ] }, { "$": { "id": "469476618", "name": "Default Sync Folder", "description": "", "user_id": "186868958", "shared": "0", "shared_link": "", "permissions": "kcfgtedopnhsuvy", "size": "49509", "file_count": "1", "created": "1352098703", "updated": "1352098713" }, "tags": [ {} ] }, { "$": { "id": "469469972", "name": "My Box Files", "description": "", "user_id": "186868958", "shared": "0", "shared_link": "", "permissions": "kcfgtedopnhsuvy", "size": "32426", "file_count": "1", "created": "1352097877", "updated": "1352097977" }, "tags": [ {} ] } ] } I want it changed become like this: { "folder": [{ "id": "471841542", "name": "Manajemen Pemasaran", "description": "", "user_id": "186868958", "shared": "1", "shared_link": "https://www.box.com/s/b0nupgg8boe25nyfz781", "permissions": "kcfgtedopnhsuvy", "size": "2258167", "file_count": "5", "created": "1352203782", "updated": "1352260971" "tags": [ {} ] }, { "id": "469509910", "name": "C++", "description": "", "user_id": "186868958", "shared": "1", "shared_link": "https://www.box.com/s/byyidt02k4sglbuvxlw3", "permissions": "kcfgtedopnhsuvy", "size": "1322331", "file_count": "128", "created": "1352101667", "updated": "1352203670", "tags": [ {} ] }, { "id": "469476618", "name": "Default Sync Folder", "description": "", "user_id": "186868958", "shared": "0", "shared_link": "", "permissions": "kcfgtedopnhsuvy", "size": "49509", "file_count": "1", "created": "1352098703", "updated": "1352098713", "tags": [ {} ] }, { "$": { "id": "469469972", "name": "My Box Files", "description": "", "user_id": "186868958", "shared": "0", "shared_link": "", "permissions": "kcfgtedopnhsuvy", "size": "32426", "file_count": "1", "created": "1352097877", "updated": "1352097977" "tags": [ {} ] } ] } Is there a way remove $ from JSON above?
This should create the result you want: var json = { ... }; // your JSON data var newJson = { folder: [] }; for (var i = 0, l = json.folder.length; i < l; ++i) { var tmp = json.folder[i].$; tmp.tags = json.folder[i].tags; newJson.folder.push(tmp); } console.log(newJson);
How can i get the total count id of this collection using javascript?
I have this collection: https://graph.facebook.com/2playcz/albums This collection contains 8 id. How can i get the total count id of this collection using javascript? (Total = 8) Source: { "data": [ { "id": "201936779932071", "from": { "name": "2play.cz - Tenisov\u00e1 \u0161kola", "category": "Sports league", "id": "190320081093741" }, "name": "Tr\u00e9ninky", "link": "https://www.facebook.com/album.php?fbid=201936779932071&id=190320081093741&aid=41883", "cover_photo": "201937046598711", "count": 8, "type": "normal", "created_time": "2012-07-02T09:33:43+0000", "updated_time": "2012-09-15T12:05:44+0000", "can_upload": false, "likes": { "data": [ { "id": "1788805921", "name": "Edita Nov\u00e1" }, { "id": "100001449904219", "name": "Mirka Brani\u0161ov\u00e1" } ], "paging": { "next": "https://graph.facebook.com/201936779932071/likes?limit=25&offset=25&__after_id=100001449904219" } } }, { "id": "205206429605106", "from": { "name": "2play.cz - Tenisov\u00e1 \u0161kola", "category": "Sports league", "id": "190320081093741" }, "name": "Turnaje a akce", "link": "https://www.facebook.com/album.php?fbid=205206429605106&id=190320081093741&aid=42900", "cover_photo": "205208716271544", "count": 14, "type": "normal", "created_time": "2012-07-10T19:36:53+0000", "updated_time": "2012-09-15T12:04:05+0000", "can_upload": false }, { "id": "221784994613916", "from": { "name": "2play.cz - Tenisov\u00e1 \u0161kola", "category": "Sports league", "id": "190320081093741" }, "name": "Tenisova \u0161kolka 2play", "description": "Tenisov\u00e1 \u0161kolka 2play", "link": "https://www.facebook.com/album.php?fbid=221784994613916&id=190320081093741&aid=49379", "cover_photo": "221785024613913", "count": 9, "type": "normal", "created_time": "2012-08-31T11:19:59+0000", "updated_time": "2012-09-14T15:17:53+0000", "can_upload": false }, { "id": "203405996451816", "from": { "name": "2play.cz - Tenisov\u00e1 \u0161kola", "category": "Sports league", "id": "190320081093741" }, "name": "Webov\u00e9 fotografie - Logo", "link": "https://www.facebook.com/album.php?fbid=203405996451816&id=190320081093741&aid=42285", "cover_photo": "203406586451757", "count": 11, "type": "normal", "created_time": "2012-07-05T10:12:40+0000", "updated_time": "2012-09-14T15:16:40+0000", "can_upload": false }, { "id": "190332361092513", "from": { "name": "2play.cz - Tenisov\u00e1 \u0161kola", "category": "Sports league", "id": "190320081093741" }, "name": "Cover Photos", "link": "https://www.facebook.com/album.php?fbid=190332361092513&id=190320081093741&aid=39232", "cover_photo": "225939404198475", "count": 2, "type": "normal", "created_time": "2012-06-09T13:52:38+0000", "updated_time": "2012-09-12T18:15:51+0000", "can_upload": false }, { "id": "190802884378794", "from": { "name": "2play.cz - Tenisov\u00e1 \u0161kola", "category": "Sports league", "id": "190320081093741" }, "name": "Wall Photos", "link": "https://www.facebook.com/album.php?fbid=190802884378794&id=190320081093741&aid=39324", "cover_photo": "190802891045460", "count": 2, "type": "wall", "created_time": "2012-06-10T13:19:48+0000", "updated_time": "2012-07-17T17:16:19+0000", "can_upload": false }, { "id": "205207126271703", "from": { "name": "2play.cz - Tenisov\u00e1 \u0161kola", "category": "Sports league", "id": "190320081093741" }, "name": "Ostatn\u00ed", "link": "https://www.facebook.com/album.php?fbid=205207126271703&id=190320081093741&aid=42902", "cover_photo": "205209679604781", "count": 4, "type": "normal", "created_time": "2012-07-10T19:40:05+0000", "updated_time": "2012-07-16T14:47:16+0000", "can_upload": false, "likes": { "data": [ { "id": "100001449904219", "name": "Mirka Brani\u0161ov\u00e1" } ], "paging": { "next": "https://graph.facebook.com/205207126271703/likes?limit=25&offset=25&__after_id=100001449904219" } } }, { "id": "190320914426991", "from": { "name": "2play.cz - Tenisov\u00e1 \u0161kola", "category": "Sports league", "id": "190320081093741" }, "name": "Profile Pictures", "link": "https://www.facebook.com/album.php?fbid=190320914426991&id=190320081093741&aid=39224", "cover_photo": "190327474426335", "count": 1, "type": "profile", "created_time": "2012-06-09T13:29:16+0000", "updated_time": "2012-06-09T13:43:08+0000", "can_upload": false }, { "id": "190322704426812", "from": { "name": "2play.cz - Tenisov\u00e1 \u0161kola", "category": "Sports league", "id": "190320081093741" }, "name": "Logo", "description": "Loga spole\u010dnosti", "link": "https://www.facebook.com/album.php?fbid=190322704426812&id=190320081093741&aid=39225", "type": "normal", "created_time": "2012-06-09T13:34:09+0000", "updated_time": "2012-07-05T10:16:58+0000", "can_upload": false } ] }
If you mean the count of items in the data array, it would just be data.length.
First of all, there 9 ids. If you want to count the number of elements in array there's a built-in property length. So that if your object is called x you retrieve the length of data by accessing x.data.length. On the other hand, if you wanted to count the number of unique ids (IDs should by unique anyway, but if you really really wanted to) you have to manually iterate through the array and count them: var countIds = function (arr) { var uniqueIds = {}, num = 0; if (!arr.data) return false; arr.data.forEach(function (val, i) { if (typeof uniqueIds[val.id] === "undefined") { ++num; uniqueIds[val.id] = true; } }); return num; };
Extracting data from JSON using javascript
I have JSON similar to this . I wish to extract values like name, his id, and product title from this list . But I am not able to figure it out . I was trying "eval" for the same. { "data": [{ "id": "3092773937557", "from": { "id": "1810306393", "name": "Prashant Singh" }, "start_time": "2012-07-21T09:12:53+0000", "end_time": "2012-07-21T09:12:53+0000", "publish_time": "2012-07-21T09:12:53+0000", "application": { "id": "132692593533721", "name": "Compare Hatke" }, "data": { "productname": "Apple iPod Nano", "price": 399, "product": { "id": "10151004296768984", "url": "http:\/\/compare.buyhatke.com\/products\/Apple-iPod-Nano", "type": "comparehatke:product", "title": "Apple iPod Nano" } }, "likes": { "count": 0 }, "comments": { "count": 0 }, "no_feed_story": false }, { "id": "3092770217464", "from": { "id": "1810306393", "name": "Prashant Singh" }, "start_time": "2012-07-21T09:08:53+0000", "end_time": "2012-07-21T09:08:53+0000", "publish_time": "2012-07-21T09:08:53+0000", "application": { "id": "132692593533721", "name": "Compare Hatke" }, "data": { "productname": "Apple iPod Nano", "price": 399, "product": { "id": "10151004296768984", "url": "http:\/\/compare.buyhatke.com\/products\/Apple-iPod-Nano", "type": "comparehatke:product", "title": "Apple iPod Nano" } }, "likes": { "count": 0 }, "comments": { "count": 0 }, "no_feed_story": false }], "paging": { "next": "https:\/\/graph.facebook.com\/me\/comparehatke:compare\/?access_token=AAAB4rubm4xkBAHRhdjVgx7JxIIvUxImIm31AMxgnqEAOQsAsgZAJjBYUfvzKc8XgxDBg3AzKN1S6QU2dnmtgj7TPcoCiih1RzrL3pLpuZAgGt8eKpq&limit=2&method=get&pretty=0&offset=2" } }
<html> <script style="text/javscript"> var myObject = { "data": [{ "id": "3092741696751", "from": { "id": "1810306393", "name": "Prashant Singh" }, "start_time": "2012-07-21T08:40:38+0000", "end_time": "2012-07-21T08:40:38+0000", "publish_time": "2012-07-21T08:40:38+0000", "application": { "id": "132692593533721", "name": "Compare Hatke" }, "data1": { "productname": "Apple iPod Nano", "price": 399, "product": { "id": "10151004296768984", "url": "http:\/\/compare.buyhatke.com\/products\/Apple-iPod-Nano", "type": "comparehatke:product", "title": "Apple iPod Nano" } }, "likes": { "count": 0 }, "comments": { "count": 0 }, "no_feed_story": false } ]}; alert(myObject.data[0].id); </script> </html>
data = JSON.parse(yourJSONString); If this fails, you likely have an error in your JSON. You can use http://jsonlint.com/ to find and resolve the problem. In the paste above, you're missing your closing ]}.