이전에 글을 쓰면서 나는 map() 함수를 사랑한다고 한적이 있는데

오늘은 자바스크립트를 하며 많이 사용하고 찾게 되는 배열 순회 함수를 소개한다.

많이들 보았겠지만 map()forEach()가 대표적이다.

 

let array = [1, 4, 9, 15];
let obj = [{name:"lee", age: 13}, {name:"kim", age: 15}, {name:"park", age: 12}, {name:"choi", age: 14},];

let arrayMap = array.map((x) => x + 2);
let arrayFor = array.forEach((x) => x + 2);

let objMap = obj.map((p) => console.log(p.name));
let objFor = obj.forEach((p) => console.log(p.name));

console.log(arrayMap, arrayFor);

예시 코드
예시 코드

샘플로 만든 array 숫자 배열과 객체 배열인 obj를 map()과 forEach()를 통해 콘솔에 찍어보면 비교가 쉽다.

 

결과 콘솔 사진
결과 콘솔 사진

우선 사용하는 방법은 둘다 동일하다.

array.map() 또는 forEach()안에 (배열의 원소) => 실행될 함수 방식으로 써주면 된다. (꼭 arrow function 아니여도 됨)

 

둘의 가장 큰 차이점은 10번줄에 찍힌 로그를 보면 확인할 수 있는데

객체 배열의 name을 콘솔에 찍은 것은 둘다 똑같지만 (단순 실행)

map을 사용한 arrayMap[]은 결과가 배열로 리턴된 것을 볼 수 있고 그것과 달리 forEach를 사용한 arrayFor는 undefined가 나온다..!

 

결론 => map()은 실행과 함께 결과 값도 저장(리턴)

forEach()는 just 실행이에요

 

실제 업무할 때 쓰는 프로그램중에 복사 붙혀넣기를 해야하는 프로그램이 있는데 너무 많이 붙혀넣기를 하려다보니 귀찮아서 자동으로 복사되는 프로그램을 만들어 보다가 js로 복사하는 메소드를 찾게 되었다.

 

이전부터 쓰이던 것들이나 api도 있는거 같지만 환경만 된다면 가장 간단하게 할 수 있는 방법으로 소개한다.

window.navigator.clipboard.writeText();

간단한 예시 사진
간단한 예시

간단하게 설명하면 innerHTML(textarea)이나 textContent(div)로 가져온 문자열을 복사해준다.

 

환경은 https 또는 localhost 에서만 작동하는데 집에서 인터넷으로 할때는

127.0.0.1까지는 문제 없이 작동하는 것을 확인했다.

회사에서 쓸때 와이파이나 테스팅 서버에서 사용할 경우에는 앞에 주소를 localhost로 바꿔주면 문제 없었다.

127.0.0.1은 복사가 된다
127.0.0.1

 

복사가 안될땐 localhost
localhost / https

 i'm 완벽이에요^^

국비지원 교육을 받으면서 처음 코딩 공부를 할때 드롭 다운 메뉴가 첫 과제 같은 느낌이었다.. (어렵진 않지만?)

하지만 html5가 되고 나서 쉽게 드롭다운 메뉴를 만들 수 있는 태그가 생겨서 소개한다.

 

바로 details / summary 태그!

<details>
      <summary>태그로 만드는 드롭 다운 메뉴</summary>
      <ul>
         <li>메뉴1</li>
         <li>메뉴2</li>
         <li>메뉴3</li>
      </ul>
   </details>
   <details>
      <summary>태그로 만드는 드롭 다운 메뉴2</summary>
      <div>
         <div>메뉴1</div>
         <div>메뉴2</div>
         <div>메뉴3</div>
      </div>
   </details>

쉽게 details 태그 안에 summary라는 제목을 넣고 그 외의 다른 메뉴들은 드롭 다운 안으로 들어가게 되는 태그이다.

위 코드의 결과 

ul / li든 div든 뭐든 들어간다!

회사에서나 실제로 쓸때에는 아직 애니메이션이 안된다고 해서 잘 못쓰는 중이긴 하지만 그런거 없는 간단한 드롭다운 메뉴를 만들때에는 쉽게 만들 수 있게 해준다.

 

그리고 summary 앞에 화살표로 나타내는 표시가 있는데 이것 또한 css로 쉽게 커스텀 할 수 있다.

details summary::-webkit-details-marker,
details summary::marker {
 display: none;
 content: "";
}

가끔 검색하다 보면 display: none; list-style-type:none; 으로 된다는 글을 봤었는데.. 안 됐었다

포스팅 하려고 쓰면서 다시 찾아보니 stack-overflow에 content:"";을 찾아서 성공했다.

before / after처럼 content를 가지고 커스텀 하는 방식인 듯!

 

https://stackoverflow.com/questions/48814993/html-details-summary-element-marker-styling

 

HTML Details/Summary Element Marker Styling

I have some CSS that styles the marker next to a summary element within a details element. The CSS itself works fine. However, if I nest another details element within the first one (creating a p...

stackoverflow.com

아직 애니메이션 효과를 줄 수 없어서 아쉽긴 하지만 다음 버전에는 가능해지지 않을까 생각한다.

믿어요^^

슬라이드 메뉴를 만들때 유용한 Swiper.js를 사용하다가 클릭한 요소를 가운데로 옮기는 기능이 필요하게 되었다.

이것 또한 블로그에 여러 글을 보게 되었는데 다 방법은 똑같으나 나는 계속 달라서 왜 그러는지 고민하다가 성공했다..

 

내 슬라이드 옵션

보통 블로그 글에서는 초기화 시키고 깨끗한 상태에서 가운데 정렬 시키는 경우가 많았는데 나는 spaceBetween으로 거리를 벌려 두었다. 그래서 계속 슬라이드의 인덱스 수와 인덱스 사이의 거리만큼 슬라이드 전체 길이가 늘어나서 오른쪽에 있는 슬라이드들이 가운데로 못가고 있었다.

흔히 많이 보는 코드에서 슬라이드 인덱스 수와 마진을 곱한 값을 listWidth에 추가해서 구해줘야 했다.
하단에 넣은 슬라이드 메뉴

슬라이드 부분만 슬쩍 가져오고 색깔도 막 해놓은거라 이쁘진 않지만..

가운데 정렬이동과 선택은 잘 된다. 

 

항상 질문과 같이 고민할만한 내용은 환영입니다. (본인은 뇌가 고통 받는거 좋아함) 

+ Recent posts