Estou tentando fazer um loop através de um Filelist
:
console.log('field:', field.photo.files)
field.photo.files.forEach(file => {
// looping code
})
Como você pode ver, field.photo.files
tem um Filelist
:
Como fazer um loop corretamente field.photo.files
?
javascript
file
alex
fonte
fonte
Array.prototype.forEach.call(field.photo.files, file => console.log(file));
field.photo.files
é um objeto com protótipoFileList
; assim comoHTMLCollection
, ele não temArray.prototype
em sua cadeia de protótipos.for loop
Trabalho simples :)Respostas:
A
FileList
não é umArray
, mas está em conformidade com seu contrato (possuilength
e índices numéricos), para que possamos "emprestar"Array
métodos:Como você obviamente está usando o ES6, também pode torná-lo adequado
Array
, usando o novoArray.from
método:fonte
Building.vue?92ca:292 Uncaught (in promise) TypeError: Cannot convert undefined or null to object(…)
comArray.from
.field.photo.files
? Eu não estava verificando que ...field.photo.files
é exatamente o que osconsole.log
shows na minha pergunta.[...field.photo.files].map(file => {});
Você também pode iterar com um simples para:
fonte
No ES6, você pode usar:
Referência: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
fonte
A biblioteca lodash possui um método _forEach que percorre todas as entidades da coleção, como matrizes e objetos, incluindo o FileList:
fonte
O código a seguir está em Texto Dactilografado
fonte
Se você estiver usando o Typecript, poderá fazer algo assim: Para uma variável 'files' com o tipo FileList [] ou File [], use:
fonte