01. Spread 연산자 - 스프레드(Spread) 연산자와 Rest  파라미터  


iterable object의 element를 하나씩 분리하여 전개한다.
iterable 객체는 반복 객체로써 객체의 원소에 하나씩 차례로 접근 가능하다.

' ... ' 점 세개로 시작해서 뒤에 이터러블 오브젝트를 써주면 된다.
[...iterableObj]
function(...iterableObj){ }

예시
let first = [1,2];
let last = [9,10];
let result = [...first, 3,4,5,6,7,8, ...last];

console.log(result);

결과 값
1,2,3,4,5,6,7,8,9,10

...first를 전개하여 1,2의 값을 result의 배열에 넣어준다.
그 후 3~8까지의 숫자가 배열에 들어있고 ...last를 전개하여 9,10을 result의 배열에 넣어줌으로써
1~10까지의 결과 값이 나온다.
(전개 시 result의 length 값은 10, 전개가 안되면 8)

문자열 전개 시에는 string 오브젝트가 iterable 오브젝트 이므로 쓸 수 없다.
let spreadObj = [...'okayoon'];

console.log(spreadObj);

결과 값
['o','k','y','o','o','n']

파라미터로 넘길 때 (spread parameter)
const number = [1,2,3];
getNum(...number);

function getNum(num1,num2,num3){
    console.log(num1, num2, num3);
}

결과 값
num1 = 1
num2 = 2
num3 = 3
함수 호출 전에 ...number를 전개한 후 파라미터로 전달하기 때문에 결과 값과 같은 형태가 된다.

호출하는 함수의 파라미터 값이 분리된 형태를 spread 파라미터라고 한다.


 

사전작업으로 구글 인증키를 발급 받은 후 진행해야 합니다.
 
예시
HTML
<body>
  <section>
    <h1>남산타워</h1>
    <div id="google-map"></div>
  </section>
  
  <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDSaNN-dG5G4UMVIrrYU2M5-h2JTMxUdQE&callback=initMap"
      async defer></script>
            
      <script>
      	// 이곳에 코드 작성
      </script>
</body>
</body> 위에 google API script를 추가해줍니다.

그리고 API가 로드된 후에 script가 읽혀질 수 있도록 아래에 <script> 영역을 생성합니다.

 

 

CSS

#google-map {
  width:500px;
  height: 300px;
}
*필수로 맵 엘리먼트의 높이 값을 지정해줘야 합니다.
 

JS

<script>
  var map;
  function initMap() {
    map = new google.maps.Map(document.getElementById('google-map'), {
      center: {
      	lat: 37.551073, 
        lng: 126.987893
      },
      zoom: 15
    });
  }
</script>

위에 작성했던 <script>안에 코드를 넣어줍니다.

center에서 lat과 lng의 값은 좌표 값입니다. 여기에서 좌표값을 참조할 수 있습니다.

zoom은 얼마나 지도를 확대할 수 있는지입니다. 숫자가 클수록 더 커집니다.

 

lat(latitude), lng(longitude) 값 구하기

place name에 주소를 입력해줍니다.
lat, lng값을 복사해서 위의 스크립트 내부에 붙여넣기하면 해당하는 좌표로 설정된 맵이 나옵니다.

 

 

예제

*무료 사용 건 수가 넘으면 콘솔에 에러가 납니다.

See the Pen zmyVrE by leeyoonseo (@okayoon) on CodePen.

 

 

백엔드와 작업 시 파라미터 값을 보내야 하는 일이 빈번한데, 이번에 처음 겪은 이슈가 있어 작성해둔다.

이건 내가 작성한 ajax 코드가 아니었고, 유지보수 업무였다.

(ajax 옵션을 잘 몰랐던 문제가 가장 컸다)

 

아래와 같이 작성했던 ajax 코드가 있었다.

데이터가 전송이 안되서 문제를 찾아보던 중에 processData를 알게되었다.

 

JS

$.ajax({
  url : '',
  processData : false,
  contentType : "application/json",
  data : {
    id : 'abcd'
  },
  type : "GET",
  success : function(res){
    //.......    
  }
});

 

processData 란?

기본값은 true다.

ajax 통신을 통해 데이터를 전송할때, 기본적으로 key와 value값을 Query String으로 변환해서 보낸다. 

데이터 값에 따라 (key=value&key=value) 또는 (key:value, key:value) 이런 식으로 보내게되는데,

이때 이 processData가 false로 되어 있으면 Query String으로 설정하지 않는다.

processData는 파일 전송 시에 사용한다고 한다.

 

그래서 processData를 false하고 데이터를 보낸 후 피들러를 확인해보면 [object object]로 찍힌다.

processData값을 지워서 해결했다.

 

 

 

 

input에 데이터를 입력을 받을때, 해당 코드 포맷에 맞추어 입력해줘야하는 요구가 있었다.

 

디테일한 요구조건

1. 숫자만 입력

2. {0000 0000} 포맷

3. max 8자

 

 

HTML

<label for="code"> 
  해당 코드를 입력해주세요.<br> 
  <span style="font-size:12px;">(EX : 1234 5678)</span><br>
</label> 

<input id="code" type="text">

 

JS

$('#code').on('input', function(){ 
  var thisVal = $(this).val().replace(/\s|\D/g, '');
  thisVal = thisVal.replace(/(\d{4})\B/g, '$1 ');
  thisVal = thisVal.substr(0,9); 

  $(this).val(thisVal); 
});	

 

CSS

#code{margin-top:10px; display:block;}

 

문자를 입력받게되면 빈값으로 치환했고 그 다음 한칸 스페이스와 포맷에 맞춰 삽입했다.

그리고 마지막으로 스페이스 포함 9자 이상일 경우 노출되지 않도록 9자까지만 subStr로 잘라서 해당 input에 넣어줬다.

 

예제

See the Pen accesscode input format example by leeyoonseo (@okayoon) on CodePen.

 

 

+ Recent posts