ファイルリストではforEachを使用できません


132

私はループスルーしようとしていますFilelist

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

ご覧field.photo.filesFilelistとおり、

ここに画像の説明を入力してください

正しくループする方法はfield.photo.files


2
Array.prototype.forEach.call(field.photo.files, file => console.log(file));
Tolgahan Albayrak 2016

配列ではありませんか?これはnode.jsですか?
connexo 2016

@connexo:いいえ、field.photo.filesプロトタイプ化されたオブジェクトFileListです。と同様にHTMLCollectionArray.prototypeプロトタイプチェーンにはありません。
アマダン16

単純なfor loop作業:)
Reza

回答:


264

A FileListはではありませんがArray、その規約(has lengthおよび数値インデックス)に準拠しているため、Arrayメソッドを「借りる」ことができます。

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

明らかにES6 Arrayを使用しているため、新しいArray.fromメソッドを使用してそれを適切なにすることもできます。

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

奇妙なことに、私はこれを取得Building.vue?92ca:292 Uncaught (in promise) TypeError: Cannot convert undefined or null to object(…)Array.fromます。
alex

さて、あなたの変数は確かfield.photo.filesですか?私はそれをチェックしていませんでした...
アマダン

@Amadan field.photo.filesはまさにconsole.log私の質問で示したものです。
alex

@アマダンくそー、それはタイプミスでした。ごめんなさい。
alex

11
スプレッド演算子を使用することもできます[...field.photo.files].map(file => {});
Henrikh Kantuni



3

lodashのライブラリが有する_forEachの方法をそのようなファイルリストを含む配列やオブジェクトなどのすべてのコレクションのエンティティ、をループ。

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

0

次のコードはTypescriptにあります

     urls = new Array<string>();

     detectFiles(event) {
       const $image: any = document.querySelector('#file');
       Array.from($image.files).forEach((file: any) => {
       let reader = new FileReader();
       reader.onload = (e: any) => { this.urls.push(e.target.result); }
       reader.readAsDataURL(file);
      }
    }

-2

Typescriptを使用している場合は、次のようなことができます。FileList []またはFile []タイプの変数「files」の場合は、次のようにします。

for(let file of files){
    console.log('line50 file', file);
  }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.