Как манипулировать объектами LatLng? - PullRequest
0 голосов
/ 21 июня 2019

Я выполняю запрос к базе данных и получаю (как показано с помощью 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}]}
]

Это запись с некоторыми свойствами, и одно свойство является массивом Lat/ Lng. Чтобы получить эту запись, у меня есть следующий код:

 this.customerApi.getSites(this.currentUser.id)
.subscribe(response => {
  this.sites = response;
  console.log('sites : ' + JSON.stringify(this.sites));
});
  }

Я получаю Observable (), который я показываю в консоли.

Я хотел бы получить свойство Pointи поместите его в массив массивов, поскольку в нем может существовать много записей, отправленных бэкэндом. Цель состоит в том, чтобы иметь вложенные координаты, которые могли бы рисовать многоугольники на карте Google с угловым компонентом Google Map

., Я объявил:

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

и под "подпиской" сделайте:

.subscribe(response => {
  this.sites = response;
  this.rectangles.push(this.sites.points); 

прямоугольники пустые.

Любая идея, которая может мне сильно помочьпожалуйста?

Заранее спасибо за помощь.

1 Ответ

1 голос
/ 21 июня 2019

Я вижу в вашей структуре данных, что сайты - это массив. Так что если вы сделаете 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)

Надеюсь, теперь стало понятнее.

...