不能与文件列表一起使用forEach

ale*_*lex 92 javascript file

我正试图循环Filelist:

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

你可以看到field.photo.files有一个Filelist:

在此输入图像描述

如何正确循环field.photo.files

Ama*_*dan 196

A FileList不是Array,但它确实符合其合约(有length和数字索引),所以我们可以"借" Array方法:

Array.prototype.forEach.call(field.photo.files, function(file) { ... });
Run Code Online (Sandbox Code Playgroud)

既然您显然使用的是ES6,那么您也可以Array使用新Array.from方法使其成为正确的:

Array.from(field.photo.files).forEach(file => { ... });
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用传播运算符`[[... field.photo.files] .map(file => {});` (6认同)

dud*_*ude 27

在 ES6 中,您可以使用:

[...field.photo.files].forEach(file => console.log(file));
Run Code Online (Sandbox Code Playgroud)

参考:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment


小智 26

你也可以用一个简单的迭代:

var files = field.photo.files;

for (var i = 0; i < files.length; i++) {
    console.log(files[i]);
}
Run Code Online (Sandbox Code Playgroud)


Moh*_*och 6

lodash库有一个_forEach方法,它循环遍历所有集合实体,例如数组和对象,包括 FileList:

_.forEach(field.photo.files,(file => {
     // looping code
})
Run Code Online (Sandbox Code Playgroud)