Zoom_changed 를 이용하여 CustomOverlay 숨기기 질문드립니다 2

이중 반복문으로 positions.length만큼 반복문이 돌면서
Marker, CustomOverlay가 중복 생성되고 있으며
가장 마지막으로 담긴 커스텀 오버레이만 삭제하고 있습니다.
코드 참고해주세요.

var markers = [];
var customOverlays = [];

for (var i = 0; i < positions.length; i++) {
    const lat = positions[i].lat;
    const lng = positions[i].lng;

    var marker = new kakao.maps.Marker({
        position: new kakao.maps.LatLng(lat, lng)
    });

    var customOverlay = new kakao.maps.CustomOverlay({
        content: positions[i].content,
        position : new kakao.maps.LatLng(lat, lng),
        map:map,
        zIndex: 1
    });

    // 생성한 마커와 커스텀 오버레이를 배열에 담아줍니다.
    markers.push(marker);
    customOverlays.push(customOverlay);
}

clusterer.addMarkers(markers);

// 확대 축소에 따라 커스텀 오버레이 출력 유무 정하기기
kakao.maps.event.addListener(map, 'zoom_changed', function() {
    if(map.getLevel() <= 7) {
        for(let i=0; i<customOverlays.length; i++) {
            customOverlays[i].setMap(map);
        }
    } else if(map.getLevel() >= 7) {
        for(let i=0; i<customOverlays.length; i++) {
            customOverlays[i].setMap(null);
        }
    }
});

그리고 대량의 마커표시 관련 내용은 아래 답변 참고해주세요.
https://devtalk.kakao.com/t/topic/70927/2