Когда я хочу отобразить данные в результате, я получаю undefined .

Это происходит только с массивом progress .

С остальными данными такой проблемы нет.

Почему это происходит и как это исправить?

console.log (this.splineChart)

[{…}]
  0:
   data: Array(1)
     0: Array(2)
       0: undefined
       1: undefined

Ts:

  user: User[];
  splineChart = [];

  load() {
    this.route.params
      .pipe(
        switchMap(
          (params: Params) => {
            if (params['id']) {
              return this._peopleService.getPeopleById(params['id'])
            }
            return of(null)
          }
        )
      )
      .subscribe(
        (user: User[]) => {
          this.splineChart = [{
            data: user.map(function (item) {
              return [item.progress.tasks, item.progress.week]; 
          })}]
        },
        error => {
          console.log(error)
        }
      )
  }

Мой файл json ::

{
    "users": [
        {
            "id": 1,
            "fname": "Tommie",
            "lname": "Shurtleff",
            "photo": "tommie",
            "money": "667.16",
            "progress": [
                {
                    "id": 1,
                    "week": 1,
                    "tasks": 29
                },
                ...
            ]
        }
    ]
}
0
Nonsense 21 Авг 2020 в 09:05

2 ответа

Лучший ответ

Прогресс - это массив, и вы рассматриваете его как объект. item.progress.tasks это не сработает для массива.

Вы должны пройти через item.progress, чтобы получить желаемый результат.

Замените часть подписки на приведенную ниже.

this.splineChart = [{
   data: user.map(function(item) {
     return item.progress.map(progress => [progress.tasks, progress.week]);
   })
}];

См. Ниже в качестве примера.

const user = [{
  "id": 1,
  "fname": "Tommie",
  "lname": "Shurtleff",
  "photo": "tommie",
  "money": "667.16",
  "progress": [{
      "id": 1,
      "week": 1,
      "tasks": 29
    },
    {
      "id": 1,
      "week": 2,
      "tasks": 30
    },
  ]
}];

let splineChart;
this.splineChart = [{
  data: user.map(function(item) {
    return item.progress.map(progress => [progress.tasks, progress.week]);
  })
}];

console.log(this.splineChart)
1
Vivek Jain 21 Авг 2020 в 06:40

Попробуйте активировать Route, например:

constructor(
    private activatedRoute: ActivatedRoute
    .....
) {}

Затем

load() {
   const id = this.activatedRoute.snapshot.params.id;
   if (id != null)
     this._peopleService.getPeopleById(id)
     .subscribe(
       (user: User[]) => {
         this.splineChart = [{
           data: user.map(function (item) {
             return [item.progress.tasks, item.progress.week]; 
         })}]
       },
       error => {
         console.log(error)
       }
  )

}

Желаю, это поможет вам.

-1
Khairul Bashar Lemon 21 Авг 2020 в 06:22