2

このオブジェクトを関数で渡しました

ここに画像の説明を入力

そして、このコードでループしたい

    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++;
    }

しかし、実行が for ループの宣言に達すると、このエラーでクラッシュします

Uncaught TypeError: files[Symbol.iterator] is not a function

なにが問題ですか?

4

1 に答える 1

2

基本オブジェクトは自動的には実装されませんSymbol.iteratorこれができるオブジェクトのリストです。

この構文を使用するには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);
}

または、オブジェクトのキーを取得して反復処理するだけです。

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]}`);
}

于 2017-01-12T15:47:24.393 に答える