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 回答