Перебор массива объектов в машинописи - PullRequest
1 голос
/ 10 марта 2020

Я работаю с Angular (так что машинопись) на проекте. Я пытаюсь перебрать объект


Я строю объект в сервисе примерно так:

class Point {
  id: number;
  name: string; 

  constructor(id: number, name: string) {
    this.id = id;
    this.name = name;
  }

}

Я заполняю массив этими точками, которые я получаю из базы данных

private pointList: Point[] = [];

Я делаю указание вернуть эти точки в других «компонентах» в angular

getPointsList() {
    return this.pointList;
  }

Все это делается в points.service.ts


Итак, проблема в том, что

В другом компоненте я загружаю эти точки в локальную переменную

pointList = this.pointsService.getPointsList();

ru, затем пытаюсь перебрать они вот так:

console.log(this.pointList); // first consoleLog
for (const point of this.pointList) {
      console.log(point); // second consoleLog
      console.log(point.id); // third consoleLog
}

все это делается в другом файле, в компоненте, map.ts


результаты консоли .log являются:

  1. массив, содержащий мои объекты, такие как: [{id: 1 name: 'test'} {id: 2 name: 'test2'}] и это нормально я думаю

  2. ничего

  3. ничего


так что я думаю что это не событие, введите для l oop, но я не понимаю, почему.

я также пытался

  • до console.log(this.pointList[0]), но он возвращает неопределенное значение

  • this.pointList.forEach(point => {console.log(point)});, но ничего не печаталось


вот мой «реальный» код и то, что он показывает в консоли:

enter image description here enter image description here

Может кто-нибудь сказать мне, что я делаю не так?

спасибо

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Возможно, вы пытаетесь увидеть значения до того, как массив будет заполнен. Кажется, он работает для

console.log(this.pointList);

, но это потому, что массив, показанный в окне консоли, является Dynami c: он отображает значения такими, какие они есть, когда вы расширяете массив в окне консоли, а не как они были при выполнении оператора console.log.

Чтобы увидеть массив таким, какой он есть при выполнении оператора console.log, используйте следующий оператор:

console.log(JSON.stringify(this.pointList));
1 голос
/ 10 марта 2020

Вместо этого используйте for (const point of this.pointList) {.

Поскольку для итерации по всем ключам объекта включите его прототип, поэтому при его использовании необходимо помнить о if (this.pointList.hasOwnProperty(point) {. For является своего рода ярлыком для этого.

Также вы можете использовать this.pointList.forEach(point => {.... Лично это мой любимый метод, потому что вы можете присоединиться к нему с .map, .filter или .find методами

...