Arrays 访问数组中的对象

Arrays 访问数组中的对象,arrays,angular,object,typescript,multidimensional-array,Arrays,Angular,Object,Typescript,Multidimensional Array,我在访问数组元素时遇到问题。 当我使用以下命令打印阵列时: console.log(MyArray); 我得到了如图所示的控制台 我从一个API获得了这个数组的数据。 我不想在回调中访问它,但最终会使用数据在地图上绘制标记 我被这件事难住了 private MyArray: any[] = []; ngOnInit() { this.httpservice.getdata().subscribe (data=> {thi

我在访问数组元素时遇到问题。 当我使用以下命令打印阵列时:

console.log(MyArray);
我得到了如图所示的控制台

我从一个API获得了这个数组的数据。 我不想在回调中访问它,但最终会使用数据在地图上绘制标记

我被这件事难住了

     private MyArray: any[] = [];
     ngOnInit() {
        this.httpservice.getdata().subscribe
        (data=>
        {this.MyArray.push(data);});

     console.log(MyArray[0]);//I am trying to access it here

    var mapProp = {
      center: new google.maps.LatLng(51.508742, -0.120850),
      zoom: 10,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("googleMap"), 
     mapProp);

    var markerarray: any[] = [];



    //I want to eventually access the data here

    for (i = 0; i < 21; i++) {
      markerarray[i] = new google.maps.Marker({
      position: new google.maps.LatLng(MyArray[0][i].latitude, MyArray[i]
     [i].longitude),          //In this line
        title: MyArray[1][i].name,  //and this
        map: map
      });


    }

您何时尝试访问这些元素?如果您试图在服务结果出现之前访问,MyArray将仍然为空

如果您尝试在
数据
刚刚到来之后访问某个元素,您应该会看到它正在工作:

private MyArray: any[] = [];
ngOnInit() {
    this.httpservice.getdata().subscribe
    (data=>
    {
     this.MyArray.push(data);

     console.log(MyArray[0][1].name);
    });
}
如果要访问服务方法之外的方法,必须确保服务函数已加载数据

您可以这样等待:

private MyArray: any[] = [];

private IsDataLoaded: boolean = false;

ngOnInit() {
    this.httpservice.getdata().subscribe
    (data=>
    {
     this.MyArray.push(data);
     IsDataLoaded = true;
    });
}

while(true) {
    if(IsDataLoaded) {
        break;
    }
}

// Or this
//while(!IsDataLoaded) {
//    // do nothing but wait
//}

console.log(MyArray[0][1].name);

问题是您试图在subscribe方法返回之前访问数组

像这样修改ngOnInit(),然后尝试:

   private MyArray: any[] = [];
   ngOnInit() {
    var mapProp = {
           center: new google.maps.LatLng(51.508742, -0.120850),
           zoom: 10,
           mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("googleMap"), 
                  mapProp);

   var markerarray: any[] = [];
   this.httpservice.getdata().subscribe(
   (data)=>
   {
     this.MyArray.push(data);
     console.log(MyArray[0]);//Access it here

    //I want to eventually access the data here

    for (i = 0; i < 21; i++) {
      markerarray[i] = new google.maps.Marker({
      position: new google.maps.LatLng(MyArray[0][i].latitude, MyArray[i]
     [i].longitude),          //In this line
        title: MyArray[1][i].name,  //and this
        map: map
      });
    }  // end for
   });  // end subscribe
 } // end ngOninit
private MyArray:any[]=[];
恩戈尼尼特(){
var mapProp={
中心:新google.maps.LatLng(51.508742,-0.120850),
缩放:10,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById(“googleMap”),
mapProp);
var-markerary:any[]=[];
此.httpservice.getdata()为订阅(
(数据)=>
{
this.MyArray.push(数据);
console.log(MyArray[0]);//在此处访问它
//我想最终访问这里的数据
对于(i=0;i<21;i++){
markerarray[i]=新的google.maps.Marker({
位置:新建google.maps.LatLng(MyArray[0][i]。纬度,MyArray[i]
[i] .longitude),//在这行中
标题:MyArray[1][i]。名称,//和此
地图:地图
});
}//结束
});//结束订阅
}//结束恩戈尼特

浏览器控制台将向您显示完整的数据,因为如果您在图像“i”中看到工具提示,它会说“下面的值正在评估”。这意味着当您在执行console时尝试访问数组中的对象时,其中没有对象值。

您如何尝试访问元素?@er han例如,如果我想访问名称,我使用的名称是:console.log(MyArray[0][1].name)。这不起作用。您也可以添加错误日志吗?@er han error\u handler.js:54异常:./AppComponent类AppComponent-inline模板中的错误:3:45原因:无法读取undefinedOk的属性“1”。你不能在那里访问它。因为。订阅。。。是异步的,尚未收到值。在内部执行console.log.subscribe回调。我尝试了这个。但是没有使用此方法为数组分配数据。我刚得到一个空数组。非常感谢。我对这个问题作了必要的修改。我怎样才能从外面接近它?@槲寄生我已经更新了我的答案。你应该等到数据加载。我试过了,但我的chrome一直在加载。我必须使用任务管理器强制关闭此服务。您应该确保服务已超时,并且在出现任何错误时跳过while部分。否则会出现死锁。谢谢,但我最终还是想在回调之外使用它。我已经更新了我的问题。你想访问MyArray的
循环是否在你的ngOnit()中?是的,它在ng0nit()中。嗯。在这种情况下,
for
循环必须在subscribe块内。否则它将在MyArray获得数据之前运行。已更新我的答案。请检查一下。
   private MyArray: any[] = [];
   ngOnInit() {
    var mapProp = {
           center: new google.maps.LatLng(51.508742, -0.120850),
           zoom: 10,
           mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("googleMap"), 
                  mapProp);

   var markerarray: any[] = [];
   this.httpservice.getdata().subscribe(
   (data)=>
   {
     this.MyArray.push(data);
     console.log(MyArray[0]);//Access it here

    //I want to eventually access the data here

    for (i = 0; i < 21; i++) {
      markerarray[i] = new google.maps.Marker({
      position: new google.maps.LatLng(MyArray[0][i].latitude, MyArray[i]
     [i].longitude),          //In this line
        title: MyArray[1][i].name,  //and this
        map: map
      });
    }  // end for
   });  // end subscribe
 } // end ngOninit