Я пытаюсь пройти через Filelist
:
console.log('field:', field.photo.files)
field.photo.files.forEach(file => {
// looping code
})
Как видите, field.photo.files
есть Filelist
:
Как правильно перебрать field.photo.files
?
javascript
file
Алекс
источник
источник
Array.prototype.forEach.call(field.photo.files, file => console.log(file));
field.photo.files
это прототип объектаFileList
; точно так же, какHTMLCollection
его нетArray.prototype
в цепочке прототипов.for loop
работа :)Ответы:
A
FileList
не является объектомArray
, но он соответствует своему контракту (имеетlength
числовые индексы), поэтому мы можем «позаимствовать»Array
методы:Поскольку вы, очевидно, используете ES6, вы также можете сделать его правильным
Array
, используя новыйArray.from
метод:источник
Building.vue?92ca:292 Uncaught (in promise) TypeError: Cannot convert undefined or null to object(…)
сArray.from
.field.photo.files
? Я не проверял это ...field.photo.files
- это именно то, чтоconsole.log
показывает мой вопрос.[...field.photo.files].map(file => {});
Вы также можете выполнить итерацию с помощью простого for:
источник
В ES6 вы можете использовать:
Ссылка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
источник
В библиотеке lodash есть метод _forEach, который просматривает все объекты коллекции, такие как массивы и объекты, включая FileList:
источник
Следующий код находится в Typescript
источник
Если вы используете Typescript, вы можете сделать что-то вроде этого: Для переменной 'files' с типом FileList [] или File [] используйте:
источник