배열을 이용한 addressSearch 함수 결과를 배열에 저장할 때 문의입니다

estateInfo1[8].forEach(function(element){ //estateInfo1[8]은 주소가 있는 이중배열입니다.
	
geocoder.addressSearch(element, function(result, status) {

    // 정상적으로 검색이 완료됐으면 
     if (status === kakao.maps.services.Status.OK) {
		var y = result[0].y;
		var x = result[0].x;
    	 estatePositions.push(new kakao.maps.LatLng(y,x));
          //estatePositions는 변환된 좌표가 저장되는 배열
     }
	});
});

위 코드를 실행하면 estatePositions 배열에 좌표가 담기기는 하는데

정작 배열의 길이가 0으로 나오고 인덱스값으로 출력해도 undefind가 나옵니다 ㅠㅠ

아래 이미지는 차례로
console.log(estatePositions);
console.log(estatePositions[0]);
console.log(estatePositions.length);
를 출력한 모습입니다.

image

이로인해 마커생성을 못하고 있어요ㅠㅠ 도움 부탁드립니다.

위 답변을 보시면 답을 찾으실 수 있을겁니다.

답변 감사합니다!

그런데

var map = new daum.maps.Map(mapContainer, mapOption); 

var geocoder = new daum.maps.services.Geocoder();
var listData = [
    '제주특별자치도 제주시 첨단로 242', 
    '제주특별자치도 제주시 첨단로 241', 
    '서울특별시 송파구 오금로13길 8',
    '서울특별시 송파구 올림픽로 25',
    '서울특별시 광진구 동일로18길 80',
    '서울특별시 종로구 지봉로 25',
    '서울특별시 성북구 인촌로 73',
    '강원도 춘천시 춘천로310번길 26',
    '강원 강릉시 운산동 1081',
    '충북 단양군 단양읍 천동리 산 9-1',
    '세종특별자치시 금남면 장재리 산 31',
    '경북 청도군 화양읍 고평리 산 79-2',
    '전라남도 나주시 노안면 학산용산길 104-1'
];

listData.forEach(function(addr, index) {
    geocoder.addressSearch(addr, function(result, status) {
        if (status === daum.maps.services.Status.OK) {
            var coords = new daum.maps.LatLng(result[0].y, result[0].x);

            var marker = new daum.maps.Marker({
                map: map,
                position: coords
            });
            var infowindow = new daum.maps.InfoWindow({
                content: '<div style="width:150px;text-align:center;padding:6px 0;">' + listData[index] + '</div>',
                disableAutoPan: true
            });
            infowindow.open(map, marker);
        } 
    });
});

이 코드에서 마커들을 배열안에 넣을 수는 없나요??

배열안에 저장 햇다가 마커 하나하나에 if문을 쓰고 싶어요!

핵심은 위의 답변에 모두 있습니다.

어짜피 이 구조를 이해하지 못하면
마커를 배열에 넣어도 가져다 쓰지 못 할 뿐더러
이 후의 작업에도 차질이 생기실 겁니다.
왜 위의 코드가 왜 정상동작하는지 먼저 파악하셔야 합니다.

파악이 끝나면 마커는 전역 배열(markerArray)을 선언하신 후,
순서가 보장되길 원한다면

markerArray[index] = marker;

로 직접 인덱스 할당 하시면 됩니다.

그리고 모든 요청이 끝난 뒤 무언가를 하려고 한다면
위의 남겨드린 답변 중,


이 답변을 참고하세요.

doji님 매번 감사합니다!

구조 이해도 하고 문제 해결도 햇습니다!!

감사합니다~

1개의 좋아요