web-dev-qa-db-fra.com

Ne peut pas utiliser forEach avec Filelist

J'essaie de passer en boucle à travers un Filelist:

console.log('field:', field.photo.files)
field.photo.files.forEach(file => {
   // looping code
})

Comme vous pouvez le voir, field.photo.files a un Filelist:

enter image description here

Comment bien boucler à travers field.photo.files?

82
alex

Une FileList n'est pas une Array, mais elle est conforme à son contrat (a length et indices numériques), de sorte que nous pouvons "emprunter" Array méthodes:

Array.prototype.forEach.call(field.photo.files, function(file) { ... });

Puisque vous utilisez évidemment ES6, vous pouvez aussi en faire un Array correct, en utilisant la nouvelle méthode Array.from:

Array.from(field.photo.files).forEach(file => { ... });
172
Amadan

Vous pouvez également itérer avec un simple pour:

var files = field.photo.files;

for (var i = 0; i < files.length; i++) {
    console.log(files[i]);
}
22
Willian Ribeiro

La bibliothèque lodash a une méthode _ forEach qui parcourt toutes les entités de la collection, telles que les tableaux et les objets, y compris la liste de fichiers:

_.forEach(field.photo.files,(file => {
     // looping code
})
2
Mohoch