Как использовать карту вместо цикла for в javascript?

У меня есть multiple images, который я хочу загрузить, но мой вопрос: я хочу остановить загрузку файла размером более 2 МБ, так как же проверить размер всех выбранных файлов не более 2 МБ, используя карту вместо цикла for?

console.info(this.state.files); // see screenshot

Это консоль:

Как использовать карту вместо цикла for в javascript?

for (let i = 0; i < this.state.files.length; i++) {
  if (this.state.files[i].size > 2000000){
     console.info("files is ok");
  }else{
     console.info("files not allow to more then 2MB");
  }
}

пусть uploadFiles=this.state.files.filter(p=>p.size < 2000000);

Dhaval Patel 13.02.2019 09:34

Вы ищете Array.filter() не Array.map()

Weedoze 13.02.2019 09:35

@Weedoze Для меня Array.some() имеет еще больше смысла, если только вы не хотите сообщить пользователю, какие файлы слишком толстые, или просто отправить худые без сообщения об ошибке.

Amadan 13.02.2019 09:37

@Amadan OP просит прекратить загрузку файла размером более 2 МБ. Действительно, не совсем ясно, хочет ли он остановить все загрузки или по-прежнему загружает все файлы размером менее 2 МБ.

Weedoze 13.02.2019 09:49
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
167
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

//print the warnings as in OP post
this.state.files.forEach(file =>{
   if (file.size < 2000000){
     console.info("files is ok");
  }else{
     console.info("files not allow to more then 2MB");
  } 
})
//filter array and upload
this.state.files.filter(e=>e.size < 2000000).forEach(e=>{/*upload here*/})

Вам нужно использовать фильтр вместо карта

var images = this.state.files.filter(file => file.size < 2000000)

зачем вам нужна скобка { со стрелкой оператора return , которая по умолчанию вернет одну строку

Dhaval Patel 13.02.2019 09:40

Если вы хотите проверить, меньше ли каждый файл 2 МБ, используйте every

const areFilesValid = this.state.files.every(f => f.size < 2000000);

if (areFilesValid) {
  // continue uploading
} else {
  // don't upload
}

(размер надо сравнивать с 2*1024*1024 а не 2000000)

Ответ принят как подходящий

Все файлы :

this.state.files

Файлы размером менее 2000000

let smallSizeFiles = this.state.files.filter((file) => file.size < 2000000 );

Файлы размером больше 2000000

let largeSizeFiles = this.state.files.filter((file) => file.size => 2000000 );

Другие вопросы по теме