Попытка вставки в массив дает ошибку в angular6 - PullRequest
0 голосов
/ 10 января 2019

Я хочу отсортировать массив и сохранить полученные значения в новый массив для печати. Я попытался с push (), но возникает ошибка и показывает, что «Не удается прочитать свойство« push »из неопределенного».

`

this.dataService.userprofile().subscribe((data:any) => {
      let profile:any[]=data.profiles;
      for(let index=0;index<profile.length;index++) {
        const element = profile[index];  
        const today: number = Date.now();
        var b = Math.abs(today - Date.parse(element["dob"]));
        element["dob"] = Math.floor(b / (1000 * 3600 * 24 * 365.25));
        if (element["active"]=="N"){
          this.row.push(element); 
        }}
      this.rowData = this.row;//ag-grid row
      console.log(this.rowData)
    })

`

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вместо использования for loop, которое трудно читать и поддерживать, лучше использовать Array.prototype.reduce () и использование точечной нотации

Также обратите внимание, что в TypeScript вы должны избегать использования типа any

Код:

this.dataService.userprofile().subscribe((data: any) => {
  this.rowData = data.profiles.reduce((acc, element) => {
    const b = Math.abs(today - Date.parse(element.dob));
    element.dob = Math.floor(b / (1000 * 3600 * 24 * 365.25));
    return element.active == 'N' ? [...acc, element] : acc;
  }, []);

  console.log(this.rowData)
});
0 голосов
/ 10 января 2019

Объявить переменную row перед циклом for.

this.dataService.userprofile().subscribe((data:any) => {
      let profile:any[]=data.profiles;
      let row = [];
      for(let index=0;index<profile.length;index++) {
        const element = profile[index];  
        const today: number = Date.now();
        var b = Math.abs(today - Date.parse(element["dob"]));
        element["dob"] = Math.floor(b / (1000 * 3600 * 24 * 365.25));
        if (element["active"]=="N"){
          row.push(element); 
        }}
      this.rowData = row;//ag-grid row
      console.log(this.rowData)
    })
...