索引 0 之后的每个对象数组的 TypeError
TypeError for every array of objects after index 0
使用 React 传单和水 api。我根据从 API 获得的数据创建了一个对象数组,控制台日志显示我拥有所有正确的数据,特别是在第 109 行,它确实输出了正确的信息。然而,在第 254 和 255 行,使用 obj2[1]
只是给我“TypeError:无法读取未定义的 属性 'name'。”将这两行的索引切换回 0 使其编译并 运行,但这显然不是正确的数据。这是怎么回事?
let obj2 =[{}];
if(water){
console.log(water);
for(let i = 0; i < 5; ++i){
obj2[i] ={
name: water.value.timeSeries[i].sourceInfo.siteName,
site: water.value.timeSeries[i].sourceInfo.siteCode[0].value,
lat: water.value.timeSeries[i].sourceInfo.geoLocation.geogLocation.latitude,
long: water.value.timeSeries[i].sourceInfo.geoLocation.geogLocation.longitude,
temp: water.value.timeSeries[i].values[0].value[0].value
};
}
console.log(obj2);
PRA = [obj2[0].lat, obj2[0].long]; //PUDDING RIVER AT AURORA
TRL = [obj2[1].lat, obj2[1].long]; //TUALITIN RIVER NEAR WEST LINN
CSC = [obj2[2].lat, obj2[2].long]; //CRYSTAL SPRINGS CREEK
WRP = [obj2[3].lat, obj2[3].long]; //WILLAMETTE RIVER AT PORTLAND
BCB = [obj2[4].lat, obj2[4].long]; //BEVERTON CREEK AT BEAVERTO
console.log(obj2[0].name)
console.log(obj2[1].name)
}
控制台显示
Page.js:108 PUDDING RIVER AT AURORA, OR
Page.js:109 TUALATIN RIVER AT OSWEGO DAM, NEAR WEST LINN, OR
错误
TypeError: 无法读取未定义的 属性 'name'
页
/src/Page.js:266
263 | radius={900}
264 | >
265 | <Popup>
> 266 | <div><b>{obj2[1].name}</b></div>
| ^ 267 | <div>Temp: {obj2[1].temp} C</div>
268 | </Popup>
269 | </Circle>
我正在处理的传单部分。将索引改回 0 可以修复它。
<Marker position={TRL} icon={mapMarker}>
<Circle
color={'purple'}
center={TRL}
radius={900}
>
<Popup>
<div><b>{obj2[1].name}</b></div>
<div>Temp: {obj2[1].temp} C</div>
</Popup>
</Circle>
</Marker>
问题是你进行了 API 调用,这个过程需要时间从服务器获取数据,所以第一次 obj2 是空的,所以当你调用 obj2[1].name 时会抛出错误
解决办法就是这样
<div> {obj2.length > 1 && obj2[2].name}</div>
<div> {obj2.length > 1 && obj2[2].temp}</div>
使用 React 传单和水 api。我根据从 API 获得的数据创建了一个对象数组,控制台日志显示我拥有所有正确的数据,特别是在第 109 行,它确实输出了正确的信息。然而,在第 254 和 255 行,使用 obj2[1]
只是给我“TypeError:无法读取未定义的 属性 'name'。”将这两行的索引切换回 0 使其编译并 运行,但这显然不是正确的数据。这是怎么回事?
let obj2 =[{}];
if(water){
console.log(water);
for(let i = 0; i < 5; ++i){
obj2[i] ={
name: water.value.timeSeries[i].sourceInfo.siteName,
site: water.value.timeSeries[i].sourceInfo.siteCode[0].value,
lat: water.value.timeSeries[i].sourceInfo.geoLocation.geogLocation.latitude,
long: water.value.timeSeries[i].sourceInfo.geoLocation.geogLocation.longitude,
temp: water.value.timeSeries[i].values[0].value[0].value
};
}
console.log(obj2);
PRA = [obj2[0].lat, obj2[0].long]; //PUDDING RIVER AT AURORA
TRL = [obj2[1].lat, obj2[1].long]; //TUALITIN RIVER NEAR WEST LINN
CSC = [obj2[2].lat, obj2[2].long]; //CRYSTAL SPRINGS CREEK
WRP = [obj2[3].lat, obj2[3].long]; //WILLAMETTE RIVER AT PORTLAND
BCB = [obj2[4].lat, obj2[4].long]; //BEVERTON CREEK AT BEAVERTO
console.log(obj2[0].name)
console.log(obj2[1].name)
}
控制台显示
Page.js:108 PUDDING RIVER AT AURORA, OR
Page.js:109 TUALATIN RIVER AT OSWEGO DAM, NEAR WEST LINN, OR
错误
TypeError: 无法读取未定义的 属性 'name' 页 /src/Page.js:266
263 | radius={900}
264 | >
265 | <Popup>
> 266 | <div><b>{obj2[1].name}</b></div>
| ^ 267 | <div>Temp: {obj2[1].temp} C</div>
268 | </Popup>
269 | </Circle>
我正在处理的传单部分。将索引改回 0 可以修复它。
<Marker position={TRL} icon={mapMarker}>
<Circle
color={'purple'}
center={TRL}
radius={900}
>
<Popup>
<div><b>{obj2[1].name}</b></div>
<div>Temp: {obj2[1].temp} C</div>
</Popup>
</Circle>
</Marker>
问题是你进行了 API 调用,这个过程需要时间从服务器获取数据,所以第一次 obj2 是空的,所以当你调用 obj2[1].name 时会抛出错误
解决办法就是这样
<div> {obj2.length > 1 && obj2[2].name}</div>
<div> {obj2.length > 1 && obj2[2].temp}</div>