我现在正把头撞在桌子上。
我无法理解为什么当我使用console.log()
时,当我清楚地看到对象时,我无法遍历我的JSON对象。
这是我目前的循环:
for (var i = 0; i < list.length; i++) {
for (var y = 0; y < list[i].information.locations.length; y++) {
if (list[i].information.locations[y].city !== '') {
newArr.push({
"city": list[i].information.locations[y].city,
"country": list[i].information.locations[y].country
});
}
}
}
这给了我以下错误:TypeError: Cannot read property 'locations' of undefined
但是从我的终端屏幕截图中可以看出,我清楚地知道信息对象和包含对象的位置数组。
如果我在第一个console.log(list[i].information);
循环中尝试执行:for
,我只得到undefined
。
主要问题是我似乎有列表[i]。信息未定义或其他东西。但我认为它是定义的,因为当我使用对象执行整个数组的大型console.log时,我可以看到它。
任何人都知道为什么会这样吗? Tyvm。
答案 0 :(得分:0)
根据我的理解,你的代码在这一行打破了:
// get the user's consent to determine the location
var status = await Geolocator.RequestAccessAsync();
if (status == GeolocationAccessStatus.Allowed)
{
// get the current position
Geolocator locator = new Geolocator() { DesiredAccuracy = PositionAccuracy.High };
Geoposition pos = await locator.GetGeopositionAsync();
BasicGeoposition current = new BasicGeoposition()
{ Latitude = pos.Coordinate.Latitude,
Longitude = pos.Coordinate.Longitude };
// set the lat/long of the restaurant
BasicGeoposition restaurant = new BasicGeoposition()
{ Latitude = 51.91997, Longitude = 4.486515 };
// get the driving route
MapRouteFinderResult route =
await MapRouteFinder.GetDrivingRouteAsync(new Geopoint(current),
new Geopoint(restaurant),
MapRouteOptimization.Time,
MapRouteRestrictions.None);
// get the view and add it to the map
MapRouteView routeView = new MapRouteView(route.Route);
routeView.RouteColor = Windows.UI.Colors.Red;
TheMap.Routes.Add(routeView);
// change the view of the map to see the complete route
await TheMap.TrySetViewBoundsAsync(route.Route.BoundingBox,
null, MapAnimationKind.Default);
}
如果列表中有一个不具有相同结构的对象,它将会中断。
你应该尝试这样的事情:
for (var y = 0; y < list[i].information.locations.length; y++)
答案 1 :(得分:0)
奇怪但有用的其他人知道。
我的.information
对象未定义,因为我的mongoose模型在我写这个问题的时候没有包含它。
我认为这很奇怪,因为我可以在我的数组中清楚地看到它,但它没有在代码中定义。但它在终端。
我刚刚将"information": {}
和其他内容添加到我的模型中,一切都变得轻而易举。