라벨이 map인 게시물 표시

[JavaScript] 불변성 유지 (push, concat, 전개 연산자(spread operator) 비교해보기)

이미지
불변성 유지 이전까지 몰랐는데 리액트를 공부하면서 불변성에 대해서 알게되었다. 리액트에서 배열에 값을 추가할 때 배열의 불변성은 유지하면서 값을 추가해야한다.  일반적으로 push, splice, unshift, pop 메서드들은 배열을 직접 수정하기 때문에 불변성을 유지하기 위해서는 사용하면 안된다. 그러므로 기존의 배열은 그대로 유지하지하면서 기존의 배열을 기반으로 데이터를 추가한 새로운 배열을 만들어서 값을 수정할 수 있는 메서드인 concat, slice, map, filter 와 같은 메서드들 또는 전개 연산자(spread operator) 사용하여 불변성을 유지하면서 값을 추가해야한다. 불변성을 유지해야지 리액트의 특성을 이용하여 모든 데이터들을 필요한 상황에 리렌더링 되도록 설계할 수 있고 나중에 성능 최적화도 할 수 있다. push와 concat의 차이 ex1) push 보통 push는 배열에 새로운값을 추가할때 사용한다. 위 예제를 보면 arr배열에 숫자6을 추가해서 원본 데이터가 변경되어 반환되는것을 확인할 수 있다. ex2) concat concat 또한 push와 같이 배열에 값을 추가할 수 있다. 하지만 위 예제를 보면 원본데이터 arr의 출력값은 그대로이고 concat을 사용해 숫자6을 추가했을때 원본데이터의 수정이 아닌 새로운 배열객체를 만들어 값을 추가한다는 차이점을 확인할 수 있다. react에서 push를 사용해서 값을 추가할수도있지만 추후에 성능개선을 하기 어렵게되고 수정하기 어려운 문제를 발생시킬 수 있으므로 concat을 통해 원본데이터 객체는 유지하면서 새로운 객체 값을 가지고 문제를 풀어 나가는것이 좋다. 요즘 많이 사용되는 전개 연산자 (spread operator) 를 보면 전개 연산자 (spread operator) 위 예제처럼  arr 원본 배열은 그대로 유지하면서 값을 복제하고 새롭게 데이터를 추가하여 반환하는 arr3 배열을 확인할 수 있다. 이처럼 전개 연산자를 사용하여

[HTML] map, area 태그, usemap 속성 - 이미지 맵 지정하기

이미지
이미지를 클릭하면 특정 url 주소로 이동하도록 할 수 있다. 그런데 한 이미지를 가지고 클릭 위치에 따라 서로다른 url 주소로 이동하게도 할 수 있다. 이것을 이미지 맵 이라고 한다. 이미지 맵은 이미지에 영역을 만든 후 링크를 추가해야한다. 사용법은 아래와 같다. < map name = "맵이름" > < area > < area > ... .... </ map > < img src = "이미지 파일" usemap = "#맵이름" alt = "이미지설명" > usemap 속성에 #을 붙여야 하며 map 태그의 name 속성과 이름을 동일하게 작성해야 한다. 실제 사용 예제를 보면 < map name = "kurly" > < area shape = "rect" coords = "0,0,100,100" href = "https://www.naver.com" alt = "네이버" /> </ map > < a href = "https://www.kurly.com/shop/event/kurlyEvent.php?htmid=event%2Fjoin%2Fjoin_201223&%243p=a_custom_741527000799871056&%24deeplink_path=home&%24android_passive_deepview=false&%24ios_passive_deepview=false&%24fallback_url=https%3A%2F%2Fwww.kurly.com%2Fshop%2Fevent%2Fkurl

[JavaScript] map 함수

이미지
map함수는 배열에 사용되는 메서드이다. 배열안의 값들을 순차적으로 순회하면서 배열안의 각각의 요소들의 값을 변환시켜 배열 결과값을 반환해주는 메서드이다. 아래의 예시를 보자. // ex1) const a = [ 1 , 2 , 3 , 4 , 5 ]; let result = a . map (( v ) => v * 2 ) console . log ( result ); // [2, 4, 6, 8, 10] result . map ( b => b * 3 ); // [6, 12, 18, 24, 30] // ex2) const a = [ 1 , 2 , 3 , 4 , 5 ]; let aa = a . map (( v ) => { if ( v % 2 === 0 ) { return '짝수' ; } else { return '홀수' ; } }); console . log ( aa ); // ["홀수", "짝수", "홀수", "짝수", "홀수"] 또한 map메서드는 첫번째 인자로 배열의 데이터를 순차적으로 받지만 두번째 인자로 해당 데이터의 인덱스 값도 받을 수 있다. 결과 => 이러한 map 함수를 가지고 리액트에서 데이터를 출력할때 사용할 수 있으며 리액트로 예를들어 TODO List 를 만들었다고하면 리스트 중 특정 목록을 삭제하거나 수정해야 한다고 하면 각각의 데이터마다 고유한 key값을 가지고 수정, 삭제가 이루어지는데 그러한 key값을 생성하는데도 활용할 수 있다.

[JavaScript] array (배열)

배열은 순서가 있는 데이터를 저장할 때 사용되는 자료구조 이다. 예를들면 html 요소 목록, 1등부터 3등까지 순위 등등 순서대로 데이터를 정렬할때 사용한다. 배열은 값이 들어오는 순서대로 정렬되며 특별한 객체이다. 그렇다면 객체를 사용하여 데이터를 정렬해도 될 수 있다고 생각할 수 있지만 배열은 우리가 알고있는 객체와는 조금 다른 특별한 객체이며, 일반적인 객체의 경우 데이터 목록을 만들 수 있지만 순서대로 자료를 저장할 수 없다. 일반 객체는 배열처럼 데이터를 순서대로 작성하여도 순서대로 저장과 출력이 되지 않는다. 위에서 말했듯이 배열은 특별한 객체이다. 배열 또한 객체와 같이 프로퍼티를 추가하거나 하는등의 동작을 할 수 있다. 하지만 배열은 순서가있는 자료들을 다루는데 특화되어있으므로 일반적인 객체와 같이 프로퍼티를 추가한다던가 할 경우 순서대로 일을 처리하는것에 최적화되어 동작할 수 있는 방식을 방해하게 되므로 배열이 가지고있는 최적화된 성능이 떨어지게 된다. 그러므로 프로퍼티를 추가하거나 임의의 키를 사용해야 한다면 배열보다는 일반 객체를 사용하는것이 좋다. 배열은 일반적으로 아래와 같은 두가지 문법을 사용한다. let arr = []; let arr = new Array (); let fruits = [ "apple" , "banana" , "lemon" ]; console . log ( fruits [ 0 ]); // apple console . log ( fruits [ 1 ]); // banana console . log ( fruits [ 2 ]); // lemon 배열에는 문자열 이외에도 객체, 함수, boolean 그리고 자기 자신과 동일한 자료형인 배열 등등의 여러가지 자료형이 들어올 수 있다. 배열 안에 값을 출력하기 위해서는 인덱스 값을 사용하여야 한다. 일반적으로 사람들은 1번, 2번, 3번과 같이 숫자를 1부터 세지만 컴퓨터의 경우 0부터 숫자를 세기 때문에 첫