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