อาเรย์ - วิธีการใช้ parseFloat() กับสตริงที่มาจาก Observable?
ฉันมีปัญหาในการพยายามแปลงข้อความเป็นตัวเลขสำหรับพิกัดทางภูมิศาสตร์ ของฉันคือ: เว็บไซต์ที่มี Id เป็นต้น... และอาร์เรย์ของจุดเป็นคุณสมบัติ ฉันตัดสินใจที่จะไม่สร้างความสัมพันธ์ระหว่างเว็บไซต์กับจุด
ดังนั้นในโค้ดของฉัน: points ถูกประกาศแบบนี้:
points: Array<any> = [];
rectangles ถูกประกาศแบบนี้ (เป็นอาเรย์ของอาเรย์):
rectangles: Array<Array<LatLngLiteral>> = [];
ฉันกำลัง "วนซ้ำ" บน เว็บไซต์ สำหรับ ลูกค้า รายหนึ่ง และกำลังสร้างอาเรย์ชื่อ rectangles เพื่อแสดงบนแผนที่ Google. rectangle ประกอบด้วยหลายอาเรย์ตามที่เว็บไซต์มาจากฐานข้อมูล. ที่นี่ฉันมีสองเว็บไซต์และอาเรย์ rectangle คือ:
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}
]]]
รหัสในการดึงมันคือ:
this.customerApi.getSites(this.currentUser.id)
.subscribe(response => {
this.sites = response;
this.rectangles.push(this.sites.map(s => s.points));
});
}
ไซต์เหมือน:
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"}]
รูปแบบของอาเรย์ rectangles ของฉันดีเหมือนกับอาเรย์อีกอันหนึ่งแบบนี้ที่มีค่าที่เขียนด้วยมือในโค้ดเพื่อแสดงสี่เหลี่ยมบน Google Map ยกเว้นอาจจะเป็นจำนวนของวงเล็บเหลี่ยม...
ฉันคิดว่านี่มาจากรูปแบบข้อมูล
ดังนั้นฉันจึงลอง: points: Array<LatLngLiteral>=[]; และมันไม่ทำงาน
ฉันไม่มีไอเดียว่าฉันสามารถใช้เมธอด parseFloat() เพื่อทดลองได้ที่ไหน (ถ้ามีความจำเป็น)
มีใครมีไอเดียล้ำค่าอะไรที่จะช่วยฉันได้บ้างไหม?
คำตอบ #1
สวัสดี,
ใน TypeScript ไม่มีประเภท float ดังนั้นสิ่งที่คุณสามารถทำได้คือสร้างฟังก์ชันที่ตรวจสอบเนื้อหาของสตริงใด ๆ และจากนั้นแปลงมันหากนี่เป็น float ดังตัวอย่างด้านล่าง:
getFloatValue(val) {
if (val.indexOf('.') > -1) {
try {
eval(val);
return parseFloat(val);
}
catch(error) {
console.log('error');
}
}
return val;
}
คุณสามารถใช้สิ่งนี้กับแต่ละคุณสมบัติของวัตถุของคุณได้ดังนี้:
let lat = getFloatValue(rectangle[0].lat);
