我正在尝试为数组中的每个项执行一个函数,我知道关闭并通过使用ES6 let
补偿这一点,并尝试使用forEach
如下:
this.tourIDS = [];
this.tours.forEach(tour => {
this.tourIDS.push(tour.tour_id);
});
this.tourIDS.forEach(id => {
this.map.setFilter('routes', ['==', 'tour_id', id]);
console.log(id);
});
这是mapboxgl setFilter
函数,它接受像这个['==', 'tour_id', id]
这样的查询参数,这里的想法是为tourIDS
数组传递一次包含它的每个id。所以预期的行为是在数组中的每个元素上执行函数,但只有数组中的最后一个元素被执行,就像没有关闭一样,但console.log(id)
被正确记录每个元素,所以为什么console.log
会工作和另一个功能不?
正如@Keith在他的评论中强调的那样,循环没有问题,但是mapbox-gl js setFilter
本身的本质就是回想起这个函数会覆盖前面的过滤器。