2017-12-28 9 views
0

저는 ES6 코드의 다양한 인스턴스에서 구조 조정을 사용했지만 오늘은 모델 인스턴스 선언을 줄이고 노드에서 제대로 작동하지 않았습니다. 기본적으로 YouTube Data API의 데이터를 가져 와서 MongoDB 인스턴스에 저장합니다. 따라서, 정말 같은 응답의 축소판 부분에서 개체를 생성 :구조화를 사용하여 객체 속성에 값을 할당하십시오.

thumbnailData = { 
     smallWidth: element.snippet.thumbnails.default.width, 
     smallHeight: element.snippet.thumbnails.default.height, 
     smallURL: element.snippet.thumbnails.default.url, 
     medWidth: element.snippet.thumbnails.medium.width, 
     medHeight: element.snippet.thumbnails.medium.height, 
     medURL: element.snippet.thumbnails.medium.url, 
     highWidth: element.snippet.thumbnails.high.width, 
     highHight: element.snippet.thumbnails.high.height, 
     highURL: element.snippet.thumbnails.high.url 
    } 

그리고 나는 몽구스 스키마과 같이 있습니다

const ThumbnailSchema = new Schema({ 
    smallWidth: Number, 
    smallHeight: Number, 
    smallURL: String, 
    medWidth: Number, 
    medHeight: Number, 
    medURL: String, 
    highWidth: Number, 
    highHight: Number, 
    highURL: String 
}); 
const Thumbnail = mongoose.model('thumbnail', ThumbnailSchema); 

그래서 나는이 그런 짓을하려고했던 내 선언 :

let thumbs = new Thumbnail; 
({ thumbs.smallWidth, thumbs.smallHeight, thumbs.smallURL } = thumbnailData); 

하지만 node.js는 간단한 'Unexpect token'을 던집니다. 내 사용보다. 왼쪽에 이것이 가능하다면 아이디어? 그런 긴 형태로 객체를 써야만하는 것은 나를 죽이는 것입니다. 그러나 필요하다면 그 객체를 그대로 둘 수 있습니다. 아래 구문과 매우 유사하여 차이가 무엇인지 잘 모르겠습니다. 감사합니다.

var a, b; 
({ a, b } = {a: 1, b: 2}); 
+3

차이점은'{A, B} '변수 이름은 동안'{. 엄지 손가락 ...}'이다 부동산 액세스입니다. – Bergi

답변

0

, 자바 스크립트는 점을 인식하고 있습니다. 당신은, 그러나 반복을 최소화 할 수있는 한 가지 방법은 thumbnails 재산에서 default, medium, high을 destructuring입니다 :

const { 'default': dflt, medium, high } = element.snippet.thumbnails; 

let thumbs = new Thumbnail({ 
    smallWidth: dflt.width, 
    smallHeight: dflt.height, 
    smallURL: dflt.url, 
    medWidth: medium.width, 
    medHeight: medium.height, 
    medURL: medium.url, 
    highWidth: high.width, 
    highHight: high.height, 
    highURL: high.url 
}); 
+0

기본적으로 JS에서 예약 키워드이므로 시도했지만 오류가 발생했습니다.이 스타일을 사용했지만 기본 축소판을 제거하는 것은 사용 사례 (90x120에서 너무 작음)에 맞지 않으므로 –

+0

맞습니다. 코드를 테스트하지 않아서 죄송합니다. 방금 고쳤습니다. 이제 작동합니다. – victorkohl

0

귀하의 코드

({ thumbs.smallWidth, thumbs.smallHeight, thumbs.smallURL } = thumbnailData); 

이 작동하지 않습니다. Js 인터프리터는 속성 액세스로 간주되는 왼쪽의 토큰 .을 기대하지 않기 때문입니다. 작동 시키려면 오히려 사용할 수 있습니다.

({ a: thumbs.smallWidth, b:thumbs.smallHeight, c:thumbs.smallURL } = thumbnailData); 

이렇게하면 새 개체에 값이 할당됩니다. 매개 변수 destructuring 일하는 것이 사용

var data = {a: "a", b: "b"}; 
 

 
({a: data.a, b: data.b} = {a: 1, b : 2}) 
 

 
console.log(data.a)

+0

어쨌든 첫 번째 스 니펫은 ES6이 아닙니다. 모든 엔진이 엔진을 지원할 이유가 없습니다. – Bergi

+0

나는 첫 번째 것을 의미하지는 않습니다. 확실히, 그것은 작동하지 않을 것입니다. 나는 오히려 두 번째 것에 관해 이야기하고 있습니다. @Bergi – edkeveked

+0

왜 ES6이 아직 지원되지 않거나 V8에서는 작동하지 않는다고 말하는지는 알 수 없습니다. 확실히 그렇습니다. – Bergi

0
Object.assign(thumbs, (({ smallWidth, smallHeight, smallURL}) => ({smallWidth, smallHeight, smallURL}))(thumbnailData)); 

작은 인생 : 다음 작업 조각입니다. 또는 오래된 세련된 : 속성 액세스로 @Bergi 댓글을 달았처럼 당신은 객체 그런 식으로 destructure 수 없습니다

for(var key of ["smallWidth", "smallHeight", "smallURL"]) 
    thumbs[key] = thumbnailData[key]; 
관련 문제