Я использую цикл for для поиска результатов api и построения массива объектов, поэтому я могу использовать эти данные и добавлять их в DOM. Я делаю это, потому что результаты API Flickr не соответствуют их значениям. Например, я ищу «апертуру», а иногда это номер индекса [9], иногда это [11] и т. Д. Я не уверен, есть ли другой способ добиться результатов, которые я ищу. Я решил, что могу просто пропустить результаты и найти нужные мне значения.Как получить последний экземпляр массива, построенного из цикла for?
Есть ли способ захватить только последний экземпляр массива? Как и сейчас, если я должен был вызвать exifArray [9] .aperture, он будет показывать результат несколько раз, а также как неопределенный, когда цикл еще не достиг этой части. Я попытался переместить console.log (exifArray) только вне цикла for, чтобы он не повторялся, но он просто возвращает пустой массив, который был объявлен в верхней части функции.
Вот снимок экрана консоли, а также фрагмент кода:
Flickr.prototype.exifData = function(results) {
var apiKey = '';
var self = this;
var exifArray = [];
for (var i=0; i<results.photos.photo.length; i++) {
var currentId = results.photos.photo[i].id;
var exifData = $.ajax({
url: "https://api.flickr.com/services/rest/?method=flickr.photos.getExif&api_key=" + apiKey + "&photo_id=" + currentId + "&format=json",
dataType: "jsonp",
jsonp: 'jsoncallback',
type: "GET",
})
.done(function(exifResults) {
var options = {};
if (exifResults.stat === "ok") {
for (var x=0; x<exifResults.photo.exif.length; x++) {
var labelArray = exifResults.photo.exif[x].label;
if (labelArray === 'Model') {
options.cameraType = exifResults.photo.exif[x].raw._content;
} else if (labelArray === 'Lens Model') {
options.lensModel = exifResults.photo.exif[x].raw._content;
} else if (labelArray === 'Exposure') {
options.exposure = exifResults.photo.exif[x].raw._content;
} else if (labelArray === 'Aperture') {
options.aperture = exifResults.photo.exif[x].raw._content;
} else if (labelArray === 'ISO Speed') {
options.iso = exifResults.photo.exif[x].raw._content;
} else {continue}
}
}
exifArray.push(options);
console.log(exifArray);
if (exifResults.stat === "ok") {
self.content.renderExifData(exifArray);
}
})
}
}
Я попытался это, но мой вопрос это var lastItem = arr.pop(); также продолжает повторяться. Я попытался использовать pop внутри функции: self.content.renderExifData (exifArray); но он также зацикливается. Он возвращает последний элемент каждого массива. Кажется, я не могу получить значения из exifArray, не зацикливая, где бы я ни старался. –
Я не совсем уверен, какой элемент вы хотите получить. Но, очевидно, вы должны использовать pop() не в цикле, а когда ваш последний массив построен. Как вы сказали, вы должны использовать массив [9] или массив [11] - это именно то место, где вы должны использовать array.pop() вместо – baao