2015-08-05 2 views
0

Я использую цикл 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); 
     } 
    }) 
} 

}

console.log of results

ответ

0

Вы можете использовать pop()

var lastItem = arr.pop(); 
+0

Я попытался это, но мой вопрос это var lastItem = arr.pop(); также продолжает повторяться. Я попытался использовать pop внутри функции: self.content.renderExifData (exifArray); но он также зацикливается. Он возвращает последний элемент каждого массива. Кажется, я не могу получить значения из exifArray, не зацикливая, где бы я ни старался. –

+0

Я не совсем уверен, какой элемент вы хотите получить. Но, очевидно, вы должны использовать pop() не в цикле, а когда ваш последний массив построен. Как вы сказали, вы должны использовать массив [9] или массив [11] - это именно то место, где вы должны использовать array.pop() вместо – baao