В моем классе TS у меня есть метод, который должен перебирать массив объектов, который принимается в качестве аргумента.По какой-то причине, когда я попытался повторить его с forEach
, я внезапно получаю сообщение об ошибке forEach is not a function
.
places.forEach(place => {
this.addMarker(place.id(), place.coords(), ...);
});
Поэтому я попытался использовать итератор for...of
:
for (const place of places) {
this.addMarker(place.id(), place.coords(), ...);
};
И я получил сообщение об ошибке places is not iterable
.
Итак, я попробовал старый добрый цикл for
:
for (var i = 0; i < places.length; i++) {
this.addMarker(places[i].id(), places[i].coords(), ...);
};
И он работал нормально.
Хотя это работает, но со всеми этими places[i]
это выглядит не очень хорошо, и я не уверен, что будет хорошей идеей использовать цикл for
в файле TS со всеми доступными современными итераторами.
Так вот вопрос: почему не для каждого и для ... работы?Можно ли заставить их работать?Возможно, есть другие альтернативы, или я даже не должен беспокоиться об этом?
EDIT
Объяснение того, что places
:
Фильтркласс:
export class FilterUtility {
private placesList = ko.observableArray([]);
private placesFilter = ko.observable('');
private storage = new StorageManager();
setFilter = (category?: any) => {
if (category == null) {
this.placesFilter('');
} else if(category == 'favorites') {
this.placesFilter(category)
}
else {
this.placesFilter(category.id());
}
};
filteredPlaces = ko.computed(() => {
let self = this;
if(!self.placesFilter() || self.placesFilter() == null || self.placesFilter() == '') {
return this.placesList();
} else if(self.placesFilter() == 'favorites') {
return ko.utils.arrayFilter(self.placesList(), function(place: Place){
return self.storage.isPlaceInFavorites(place.id());
});
} else {
return ko.utils.arrayFilter(this.placesList(), function(place: Place){
return place.categoryId() == self.placesFilter();
});
}
});
getFilteredPlaces = () => {
return this.filteredPlaces;
};
addPlace = (place) => {
this.placesList.push(place);
}
Main.ts:
$.when(db.getPlacesDataFromMongoLab()).done(placesData => {
placesData[0].forEach(place => {
filter.addPlace(new Place(place));
})
});
this.manageMap = (data) => {
if (isFirstRun && data == "favorites"){
isFirstRun = false;
} else {
filter.setFilter(data);
map.renderMarkers(filter.getFilteredPlaces(), self.categoriesList)
}
};
Метод manageMap привязан для перехода по ссылкам с помощью Knockout.
Класс карты:
renderMarkers = function(places, categories) {...}