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