Рассчитать средние размеры из серии URL изображений - PullRequest
0 голосов
/ 29 января 2019
// Returns a promise that resolves with the average dimensions of all the passed in images
// Ignores any images that fail to load

function loadImages(images) {
    // Complete the body of this function
    // so that the tests below pass.

}

Я пробовал много разных способов, но это все равно не работает.Кто-нибудь может помочь с этим?Я пробовал map (), lower (). Но всегда получаю NaN.

1 Ответ

0 голосов
/ 29 января 2019

Я не буду пытаться пройти ваши тесты, но вот грубый пример того, что вы хотите сделать:

  • Создайте функцию loadImage, которая "обещает" загрузку изображения.Если изображение содержит ошибку resolve(null), поэтому вы можете отфильтровать его позже при вычислении средних значений.
  • Затем Promise.all, чтобы убедиться, что все изображения загружены.
  • Затем Array.filter для фильтрации null с, которые представляют собой изображения с ошибками.
  • Затем Array.reduce для усреднения размеров.

const loadImage = url => {
  const image = new Image()
  image.src = url
  
  return new Promise(res => {
    if (image.complete) return res(image)

    image.onload = () => res(image)
    image.onerror = () => res(null)
  })
}

const getAverageDimsOfImageURLs = imageURLs => {
  return Promise.all(imageURLs.map(loadImage))
    .then(images => {
      // filter out errored images
      images = images.filter(image => image)
    
      return images.reduce((acc, image, index) => {
        acc.width += image.width
        acc.height += image.height
        
        if (index === images.length - 1) {
          acc.width = acc.width / images.length
          acc.height = acc.height / images.length
        }
        
        return acc
      }, {
        width: 0,
        height: 0
      })
     })
}

const imageURLs = [
  'https://cdn.sstatic.net/stackexchange/img/logos/so/so-icon.png',
  'http://tineye.com/images/widgets/mona.jpg',
  'http://nonexis2tent.com/images/widgets/mona.jpg' // Bad URL.
]

getAverageDimsOfImageURLs(imageURLs)
  .then(console.log)
  .catch(console.error)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...