arrays - Cum să folosești parseFloat() pe șiruri venite dintr-un Observable?


Am o problemă încercând să convertesc textul în număr pentru coordonatele geolocației. Modelul meu este: Un site cu Id etc... și un Array de puncte ca proprietate. Am decis să nu creez o relație între site și puncte.

Deci în codul meu: puncte este declarat astfel:

points: Array<any> = [];

dreptunghiuri este declarat astfel (un Array de Array-uri):

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

Fac „loop” pe site-uri pentru un anumit client și construiesc Array-ul numit rectangles pentru a-l afișa pe Google Maps. Rectangle este compus din câte Arrays provin site-urile din baza de date. Aici am două site-uri și Array-ul rectangle este:

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}
]]] 

Codul pentru a-l recupera este:

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

Site-urile sunt ca:

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"}]

Formatul array-ului meu rectangles este bun, la fel ca un alt array ca acesta cu valoarea scrisă manual în cod care arată dreptunghiul pe Google Map. Poate cu excepția numărului de paranteze pătrate ...

Cred că aceasta provine din formatul datelor.

Deci am încercat: points: Array<LatLngLiteral>=[]; și nu funcționează.

Nu am nicio idee unde aș putea folosi metoda parseFloat() pentru a încerca (dacă este necesar).

Are cineva o idee prețioasă să mă ajute, vă rog?

Răspuns #1

Bună,

Nu există tipul float în TypeScript, așa că ceea ce poți face este să creezi o funcție care verifică conținutul oricărui șir și apoi îl convertește dacă acesta este un float, așa cum urmează:

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

Puteți folosi acest lucru cu fiecare proprietate a obiectului dvs. astfel:

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