如何将对象或任何类型的对象从可观察对象转换为对象数组



我需要操作一个数组来获取我想要的数据,流程是,后端java返回一个对象数组,angular获取数据并作为服务中的可观察对象返回。然后订阅可观察方法并循环访问数据。

我有一个与 java 对象相同的接口结构,循环访问数据并将值推送到该接口类型的空数组。

这里的问题是数据日志记录给出了正确的数组输出,但是当我对数据使用任何数组方法时,它显示未定义。

this.service.getByd(d).subscribe(dataList => {
    for (let key in dataList) {
      if (dataList.hasOwnProperty(key)) {
        this.event.push(dataList[key]);
      }
    }
  },
  err => {
    console.log(err);
  });
console.log(event) //expected output
console.log(event[0].eventType) //undefined

您看到的是未定义,因为代码不会逐行执行:

dataList: DataList[] = new Array<DataList>();
function GetDataList(){
this.service.getByd(d).subscribe(dataList => {
... //populate array
  },
  err => {
    console.log(err);
  });
console.log(event) //This works because you are creating it before the get request
console.log(event[0].eventType) //This will get called before the subscribe finishes
}

我为它的工作原理做了一些笔记。

此外,如果接口是后端的镜像,则无需遍历它;只需执行以下操作:

this.service.getByd(d).subscribe(dataList => {    
    dataList = dataList;
    console.log(dataList[0].eventType;
    }
  },
  err => {
    console.log(err);
  });

最新更新