尝试推入数组会导致angular6错误

时间:2019-01-10 02:34:42

标签: javascript angular push

我想对数组进行排序,并将获取的值存储到新的数组中进行打印。我尝试使用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 :(得分:2)

使用Array.prototype.reduce()并使用点符号

可能会导致阅读和维护困难,而不是使用for loop

还要注意,在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)
});

答案 1 :(得分:0)

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)
    })