Array.from

김철회·2022년 11월 28일
0

Array.from

코딩테스트를 하다보니 문자열을 배열로 만들어줘야 하는 상황들이 많이 생겼다. 그동안은 split("")을 통해서 배열로 만들어주었는데, Array.from을 통해서 만들 수 있는 방법을 알게 되었다.

Array.from은 문자열, 유사배열객체 등을 배열로 만들어주는 메서드이다.
여기서 유사배열객체란, 키가 인덱스로 되어 있으며 길이를 나타내는 length 속성을 갖는 객체를 말한다.

const test = "안녕하세요"
//['안', '녕', '하', '세', '요']
test.split("")

//['안', '녕', '하', '세', '요']
Array.from("안녕하세요")
//['안', '녕', '하', '세', '요']
Array.from({0 : "안", 1 : "녕", 2 : "하", 3 : "세", 4: "요", length : 5});

문자열을 배열로 만들 때는 비교적 쉽게 사용할 수 있지만, 유사배열객체를 배열로 만들어 줄 땐, 객체에 length를 추가하여 어디까지 배열로 만들어줄지 지정해줘야 한다.

Array.from 활용하여 rank 구하기.

프로그래머스 문제
영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요.

ex) score : [[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]] => result : [4,4,6,2,2,1,7]

	function solution(score) {
    var answer = Array.from({length : score.length}, ()=> 1);
    var avg = score.map( x => (x[0] + x[1])/2);
      
      for(let i=0 ; i < avg.length ; i++){
      	for(let j=0 ; j < avg.length ; i++){
        	if(avg[i] > avg[j]) answer[i]++
        }
      }
      
    return answer;
}

풀이
1) 나중에 제출할 answer에 score의 length 만큼의 기본 랭크를 만들어준다. Array.from에 의하여 score.length 길이 만큼의 값이 1인 요소를 갖는 배열을 만든다.
2) 평균값을 계산한 배열을 avg에 할당한다.
3) 이중 for문을 통해서 avg값들을 비교하고 조건에 충족하면 해당 랭크를 올려준다.

profile
안녕하세요!

0개의 댓글