I am trying to create a very basic Flickr gallery using the Flickr API. What I want to achieve is sorting my pictures by tag. What I am using is jQuery.getJSON() so that I can parse the API response of flickr.photosets.getPhotos.
The data I am interested in getting from Flickr is the tag and the URL associated to each photo. The problem with this is that the only logical way out of this for me is creating a multidimensional array of the following format:
Array['tag1'] => ['URL_1', 'URL_2', 'URL_3', 'URL_n'];
However, I cannot find any way to achieve this. My code looks like this:
$.getJSON('http://api.flickr.com/services/rest/?api_key=xxx&method=flickr.photosets.getPhotos&user_id=xxx&format=json&extras=tags%2C+url_l%2C+url_sq&nojsoncallback=1&photoset_id=xxx',
function(data) {
var imageArray = [];
$.each(data.photoset.photo, function(i, item) {
imageArray[item.tags] = [item.url_sq,];
});
});
I am aware that the code might look awkward, but I've tried everything and there's no way I can figure this out.
Finally, you can also create an empty array by setting the length property of your array into 0 .
Javascript has no inbuilt support for multidimensional arrays, however the language is flexible enough that you can emulate this behaviour easily by populating your arrays with separate arrays, creating a multi-level structure.
You can create a multidimensional array by creating a 2-D matrix first, and then extending it. For example, first define a 3-by-3 matrix as the first page in a 3-D array. Now add a second page. To do this, assign another 3-by-3 matrix to the index value 2 in the third dimension.
Yes, it's possible to have multidimensional arrays in javascript.
Here are one-liners for 5x5 matrix:
Array(5).fill(0).map(() => new Array(5).fill(0))
Or
[...Array(5)].map(x=>Array(5).fill(0))
var arr = [];
arr[0] = [];
arr[0][0] = [];
arr[0][0][0] = "3 dimentional array"
Multi dimentional arrays have a lot of gaps unless they are used properly. A two dimensional array is called a matrix.
I believe your data contains a space seperate string called "tags" containing the tags and a single url.
var tagObject = {};
data.photoset.photo.forEach(function(val) {
val.tags.split(" ").forEach(function(tag) {
if (!tagObject[tag]) {
tagObject[tag] = [];
}
tagObject[tag].push(val.url_sq);
});
});
console.log(tagObject);
/*
{
"sea": ["url1", "url2", ...],
"things": ["url4", ...],
...
}
*/
I don't know how it returns multiple tags.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With