arrays - Bagaimana cara menggunakan parseFloat() pada string yang berasal dari Observable?


Saya memiliki masalah saat mencoba mengubah teks menjadi angka untuk koordinat geolokasi. Model saya adalah: Sebuah situs dengan Id dll... dan sebuah Array dari titik sebagai properti. Saya memutuskan untuk tidak membuat hubungan antara situs dan titik-titik.

Jadi dalam kode saya: points dideklarasikan seperti ini:

points: Array<any> = [];

rectangles dideklarasikan seperti ini (sebuah Array dari Array):

rectangles: Array<Array<LatLngLiteral>> = []; 

Saya sedang "looping" pada sites untuk customer tertentu dan sedang membangun Array yang disebut rectangles untuk ditampilkan di Google Map. Rectangle terdiri dari banyak Array yang berasal dari DB. Di sini saya memiliki dua sites dan Array rectangle adalah:

rectangles : [[
[
   {"lat":44.841225,"lng":-0.580036},
   {"lat":44.842236,"lng":-0.64696},
   {"lat":44.805615,"lng":-0.63084}
],
[
   {"lat":44.819868,"lng":-0.582811},
   {"lat":44.853709,"lng":-0.483573},
   {"lat":44.80696,"lng":-0.53299},
   {"lat":44.80696,"lng":-0.629078}
]]] 

Kode untuk mengambilnya adalah:

this.customerApi.getSites(this.currentUser.id)
  .subscribe(response => {
    this.sites = response;
    this.rectangles.push(this.sites.map(s => s.points));
  });
}

Situs seperti:

sites : 
[
    {
    "siteName":"Site de Marseille",
    "siteAdress1":"rue de blabla",
    "siteAddress2":"string",
    "siteCodPost":"13010",
    "siteTown":"Marseille",
    "points":
       [
         {"lat":44.841225,"lng":-0.580036},
         {"lat":44.842236,"lng":-0.64696},
         {"lat":44.805615,"lng":-0.63084}
        ],
    "id":"5d0ce7c4a06b07213a87a753", 
    "companyId":"5cd430745304a21b9464a219",
    "customerId":"5cd430c65304a21b9464a21a"`
    }
    ,
    {
"siteName":"Site de Bordeaux",
"siteAdress1":"rue de la  Garonne",
"siteAddress2":"string",
"siteCodPost":"31000",
"siteTown":"Bordeau    x",
"points":
    [
        {"lat":44.819868,"lng":-0.582811},
        {"lat":44.853709,"lng":-0.483573},
        {"lat":44.80696,"lng":-0.53299},
        {"lat":44.80696,"lng":-0.629078}
    ],
"id":"5d0cf65fa06b07213a87a754",
"companyId":"5cd430745304a21b9464a219",
"customerId":"5cd430c65304a21b9464a21a"}]

Format dari array rectangles saya bagus seperti array lain seperti ini dengan nilai yang ditulis tangan di kode yang menampilkan persegi panjang di Google Map. Kecuali mungkin jumlah tanda kurung siku ...

Saya pikir ini berasal dari format data.

Jadi saya mencoba: points: Array<LatLngLiteral>=[]; dan itu tidak berhasil.

Saya tidak tahu di mana saya bisa menggunakan metode parseFloat() untuk mencoba (jika perlu).

Apakah ada yang memiliki ide berharga untuk membantu saya, tolong?

Jawaban #1

Halo,

Tidak ada tipe float di TypeScript jadi yang bisa Anda lakukan adalah membuat fungsi yang memeriksa isi dari string apa pun dan kemudian mengonversinya jika itu adalah float seperti berikut:

getFloatValue(val) {
    if (val.indexOf('.') > -1) {
        try {
            eval(val);
            return parseFloat(val);
        }
        catch(error) {
            console.log('error');
        }
    }
    return val;
}

Anda dapat menggunakan ini dengan setiap properti dari objek Anda seperti ini:

let lat = getFloatValue(rectangle[0].lat);