2017-01-12 7 views
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++; 
    } 
와 나는 그것을 통해 루프를 원하는

enter image description here

다음 함수에 의해 전달이 개체가

하지만 실행이 for 루프의 선언에 도달 할 때,이 에러

Uncaught TypeError: files[Symbol.iterator] is not a function 
,536와 충돌

무엇이 잘못 되었나요?

+0

'FormData' 무엇 ? –

+1

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

+0

간단한 인덱스 기반 for 루프를 사용하여'files'를 반복 할 수 있습니다 (https : //developer.mozilla 참조). .org/ko-ko/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

그것은 스크린 샷에서, 그것의 단지 개체 {} –