2017-04-24 15 views
0

こんにちは、JSONオブジェクトの配列をTypeScriptクラスに変更しようとしています。しかし、このメソッドはJsonオブジェクト属性をtypescript属性に代入しようとするたびにクラッシュするようです。私はこの問題を調査しているとintergerキャストを適用することを試みてきたが、それはしていないようですJSONオブジェクトをTypescriptクラスに変換するTypescript

活字体インターフェース

export interface marker { 
    lat: number; 
    lng: number; 
} 

活字方法

public markers: marker[]; 

ngOnInit() { 
    this.mapService.GetPhotosById(this.id).subscribe(resultlisting => { 
     this.values = resultlisting; 
     console.log(this.values); //SHOW IN PICTURE 
     this.ChangetoMarkers(this.values); 
    }, error => this.errorMessage = error); 
} 

ChangetoMarkers(someArray: Observable<any[]>) { 

    for (let entry of someArray) { 
     let mark: marker; 
     mark.lat = Number(entry.latitude); //Attempt to convert to number 
     mark.lng = +entry.longitude; //2nd attempt to convert to number 
     this.markers.push(mark); 
    }; 
    console.log(this.markers); //DOES NOT REACH THIS 
} 

地図サービス

GetPhotosById(id: string): Observable<any> { 
    return this.http 
     .post(this.config.apiEndpoint + "mapPhotos/" + id) 
     .map(this.extractJson).catch(this.handleErrors); 

}; 
private extractJson(res: Response) { 
    let data = res.json(); 
    return data; 
} 
private handleErrors(error: Response | any) { 
    let errMsg: string; 
    if (error instanceof Response) { 
     const body = error.json() || ''; 
     const err = body.error || JSON.stringify(body); 
     errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
    } else { 
     errMsg = error.message ? error.message : error.toString(); 
    } 
    console.log(errMsg); 
    return Observable.throw(errMsg); 
} 

作業。どんな提案も素晴らしいだろう。

+2

これらは「JSONオブジェクト」ではなく、JavaScriptオブジェクトです。スローされた例外はありますか? – zerkms

+4

値を持たない変数にプロパティを代入しようとすると、代わりに 'let mark:marker = {}'と書いてください –

+0

驚くべき例外はありません – RyeGuy

答えて

2

Mauricio Poppeはコメントに注意して、値のない変数のプロパティにアクセスしようとしています。

changeToMarkers(points: Array<{latitude: number, longitude: number}>) { 
    this.markers = entries.map(({latitude: lat, longitude: lng}) => ({ 
    lat, 
    lng 
    })); 

    console.log(this.markers); 
} 

緯度と経度の直列化されていない表現が互換性のある数値であるため、番号の変換は必要ありません。

+0

それを得ました。今すぐソリューションを実装する..... – RyeGuy

+0

これはconsole.log(this.markers)ステートメントには届きません。 – RyeGuy

+1

@RyeGuyどうしますか?それは購読に達するか?注意慣習のために名前を少し変更しました。テンプレートを更新してください(または名前を変更してください)) –

1

これを試してみてください:

ChangetoMarkers(someArray: any[]) { 
    console.log("array",someArray); 
    for (let entry of someArray) { 
     let mark: marker = {lat: entry.latitude, lng: entry.longitude}; 
     console.log("mark", mark); 
     this.markers.push(mark); 
    }; 
    console.log("markers",this.markers); 
} 

それはAluanハダッドのほどエレガントではありませんが、それはいくつかの理由で、これはまだ伐採により、動作しない場合、それは破壊され、その時点であなたが決定できるようにする必要がありますループの前のsomeArray、プッシュされる前のマーク、およびthis.markersの後に問題がどこに壊れているのかを正確に判断します。

関連する問題