2017-01-12 11 views
2

私はこのコード- オブジェクトをループしようとするとクラッシュforループ-の

let formData = new FormData(); 
    let item = {}; 
    let i = 0; 
    for (item of files) { 
     formData.append('file' + i, files[i]); 
     formData.append('filesNumber', i + 1); 
     i++; 
    } 
と私はそれをループにしたい

enter image description here

と、関数によって渡された、このオブジェクトを持っています

が、実行がループのための宣言に達したときに、このエラー

Uncaught TypeError: files[Symbol.iterator] is not a function 
とクラッシュ

どうしたの?

+0

'FormData'は何ですか? –

+1

@NinaScholz https://developer.mozilla.org/en-US/docs/Web/API/FormData – CBroe

+0

単純なインデックスベースのforループを使用して 'files'を反復処理することができます。https://developer.mozilla .org/en-US/docs/Web/API/FileList – CBroe

答えて

2

基本オブジェクトは自動的にSymbol.iteratorを実装しません。 Here's a list of objects that do.

for..ofの構文を使用するには、独自のイテレータを実装する必要があります。

let files = { 
 
    0: "a", 
 
    1: "b", 
 
    2: "c", 
 
    
 
    [Symbol.iterator]: function*() { 
 
    let i = 0; 
 
    while (this.hasOwnProperty(i)) { 
 
     yield this[i]; 
 
     i++; 
 
    } 
 
    } 
 
}; 
 

 
for (let item of files) { 
 
    console.log(item); 
 
}

はまた、あなただけの grabs the objects keysし、それらを反復処理します。

let files = { 
 
    0: "a", 
 
    1: "b", 
 
    2: "c" 
 
}; 
 

 
let keys = Object.keys(files); 
 
for (let i = 0; i < keys.length; i++) { 
 
    let key = keys[i]; 
 
    let item = files[key]; 
 
    console.log(`${key}: ${item}`); 
 
}

ます。また、キーの上に行ってもいい、昔ながらのfor..inループを使用することができます。

let files = { 
 
    0: "a", 
 
    1: "b", 
 
    2: "c" 
 
}; 
 

 
for (let key in files) { 
 
    console.log(`${key}: ${files[key]}`); 
 
}

+0

と書かれていますが、FormDataと何が関係しているのですか?for-loop文でクラッシュします。 –

+0

@SartherisStormhammer質問を誤読しました。 'ファイル'の種類は何ですか?あなたはその物体をどこに持って来るのかを示さない。 –

+0

それはスクリーンショットで、それはちょうどオブジェクト{} –

関連する問題