我正在向数据库运行请求并获取(如控制台中的JSON.Stringify()所示:
sites : [{"siteName":"Site de Marseille",
"siteAdress1":"rue du string",
"siteAddress2":"string",
"siteCodPost":"13010","siteTown":"Marseille",
"id":"5d0ce7c4a06b07213a87a753",
"companyId":"5cd430745304a21b9464a219",
"customerId":"5cd430c65304a21b9464a21a",
"points":
[
{"lat":44.841225,"lng":-0.580036},
{"lat":44.842236,"lng":-0.64696},
{"lat":44.805615,"lng":-0.63084}]}
]
这是具有某些属性的记录,一个属性是纬度/经度数组。 要获得此记录,我具有以下代码:
this.customerApi.getSites(this.currentUser.id)
.subscribe(response => {
this.sites = response;
console.log('sites : ' + JSON.stringify(this.sites));
});
}
我正在控制台中显示一个Observable()。
我想获取Point属性并将其推送到数组数组中,因为它可能存在许多后端发送回的记录。 目标是要有嵌套的坐标,以便可以使用Angular Google Map角度组件在Google Map上绘制多边形
为此,我宣布:
rectangles: Array<Array<LatLngLiteral>> = [];
并在“订阅”下执行以下操作:
.subscribe(response => {
this.sites = response;
this.rectangles.push(this.sites.points);
矩形为空。
有什么想法对我有很大帮助吗?
预先感谢您的帮助。
答案 0 :(得分:1)
我在您的数据结构中看到站点是一个数组。因此,如果您执行this.sites.points
,它将是undefined
。
您想要的是:this.rectangles.push(this.sites.map(s => s.points))
区别在于您尝试访问数组上的属性sites
。
数组不具有该属性,因此未定义。数组是在数据结构中构建的,这些数据结构具有一组定义的功能和属性,例如length
或map
例如:
const exampleObject = {propertyA: "value", propertyB: "another value" }
//access properties on object
//"value"
exampleObject.propertyA
//"another value"
exampleObject.propertyB
const exampleArray = ["one", "two", "three"]
//propertyA does not exists = undefined
exampleArray.propertyA
//lenght property exists on all arrays = 3
exampleArray.length
数组确实有一个名为map
的函数,这意味着在每个元素上调用一个函数并返回一个新数组。通常用于转换数据结构或获取更深层的嵌套元素。
这只是简写:
this.sites.map(s => s.points)
实际上,这意味着:
const pointsArray = this.sites.map(s => {
//s is a single element in sites array
// s has property points which is an array
return s.points
})
// now we have an array of points, we can add it to rectangles
this.reactangles.push(pointsArray)
希望现在更加清楚。