Я написал следующий код. Я брал массив с адресом и названием товара. С помощью geocode() я получал геоданные и выкладывал их на карту, но у меня вместо одной карты выходит 3. Я конечно понял, что это происходит из за того, что функция вызывается три раза в foreach.Как можно это поправить-подскажите,пожалуйста.
const arr = [{
"address": "Ярославское шоссе, 8к1",
"product": "васса3"
},
{
"address": "Большая Очаковская",
"product": "васса2"
},
{
"address": "Большая Очаковская",
"product": "васса2"
}
];
arr.forEach((item) => {
const geocode = 'Россия, Москва,' + item.address + "'";
const product = item.product;
getTest(geocode, product);
});
const acc = [];
async function getTest(geocode, product) {
const response = await fetch("https://geocode-maps.yandex.ru/1.x/?format=json&apikey=c89368db-e7f4-4942-835a-1c7df2f555ce&geocode=geocode" + geocode + '"', {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const points = await response.json();
array = points.response.GeoObjectCollection.featureMember;
array.forEach(item => {
const pos = item.GeoObject.Point.pos;
const posString = pos;
const splitsPosition = posString.split(' ', 3);
function swap(arr, a, b) {
arr[a] = arr.splice(b, 1, arr[a])[0];
}
console.log(swap(splitsPosition, 0, 1));
acc.unshift({
['address']: splitsPosition,
['product']: product
});
});
ymaps.ready(init);
function init() {
var myMap = new ymaps.Map("map", {
center: [55.852713, 37.682727],
zoom: 16
}, {
searchControlProvider: 'yandex#search'
});
var myCollection = new ymaps.GeoObjectCollection();
//здесь перебираю координаты
acc.forEach((element) => {
var myPlacemark = new ymaps.Placemark(
element.address,
{
balloonContentHeader: 'Товар:',
balloonContent: element.product
}, {
preset: 'islands#icon',
iconColor: '#0000ff'
});
myCollection.add(myPlacemark);
});
myMap.geoObjects.add(myCollection);
myMap.setBounds(myCollection.getBounds(), {
checkZoomRange: true,
zoomMargin: 9
});
}
}