배열

Creating the dots·2021년 6월 28일
0

Javascript

목록 보기
8/24

배열의 기본

//배열 선언하기
let fruit [ 'apple','mango','banana'];

//index와 element
fruit[0] = 'apple';
fruit[1] = 'mango';
fruit[2] = 'banana';
fruit[3] = undefined;

//2차원 배열
let myNumber = [[1,2],[3,4],[5,6]];
myNumber[0][1] = 1;
Number[1][1] = 4;

배열의 속성과 메소드

속성: 배열은 온점을 이용해 변수가 가지고 있는 속성에 접근할 수 있다.

myNumber.length = 3;

메소드: 온점을 이용해 관련된 명령을 실행할 수 있는데, 이때 함수를 실행하듯 괄호를 열고 닫는 형태로 실행한다.

  • 배열에 엘리먼트 추가 또는 삭제하기 !--원본파괴--!
array.shift(); //삭제된 첫 번째 요소 리턴. 어떤 인자를 넣더라도 첫 번째 요소 삭제.
array.unshift(element); //추가된 첫번째 요소 포함 배열의 길이 리턴
array.pop(); //삭제된 마지막 요소 리턴. 어떤 인자를 넣더라도 마지막 요소 삭제.
array.push(element); //추가된 마지막 요소 포함 배열의 길이 리턴
  • 배열의 요소를 복사하거나 특정 부분만 리턴: slice(), 배열리턴
let arrayCopied = array.slice(); //array 복사해서 변수에 담기
arrayCopied.slice(start,end); //start이상 end미만(optional) 인덱스만 배열로 리턴

//start만 있는 경우: end=arr.length
let array = ['hello',0,'hi',4];
array.slice(1); //[0,'hi',4]
array.slice(2); //['hi',4];

//start<0인 경우: 배열의 끝에서부터 숫자만큼 포함된 배열 리턴
let array = [1,3,5,7];
array.slice(-1); //[7]
array.slice(-2); //[5,7]

//end<0인 경우: 배열의 끝에서부터 숫자만큼 제외한 배열 리턴
let array = [1,3,5,7];
array.slice(0,-1); //[1,3,5]
array.slice(1,-2); //[3]
  • 배열인지 아닌지 확인하기: Array.isArray(), boolean리턴
Array.isArray(); //boolean값 리턴
let myNumber = [[1,2],[3,4],[5,6]];
Array.isArray(myNumber); //true
Array.isArray(123); //false
  • 문자열을 잘라 배열로 리턴: split(), 배열리턴
let arr = "i love coding";
arr.split(" "); //["i", "love", "coding"];
arr; //"i love coding"
  • 배열 속 특정 엘리먼트의 최초 인덱스 구하기: indexOf(), 인덱스리턴
arr.indexof(search element, find index); //find index부터 search element를 검색하여 해당 엘리먼트의 인덱스 리턴. 없으면 -1
let arr = [2,4,2,5,6];
arr.indexof(2); //0 arr[2]===0이지만 최소의 인덱스를 리턴하므로 0
arr.indexof(9); //-1 찾는 엘리먼트가 배열에 없을 경우 -1 리턴
arr.indexof(4,2); //-1 arr[2]===4지만, 2번째 인덱스부터 찾으므로 검색되지 않아 -1 리턴
arr.indexof(2,1); //2 1번째 인덱스부터 2를 찾으므로 2 리턴
  • 배열 속 특정 엘리먼트가 포함되어있는지 구하기: include(), boolean리턴
arr.includes(search element, from index); //from index부터 search element를 검색하여 있으면 true, 없으면 false 리턴.
let arr = ['a','b','c'];

//from index가 배열의 길이보다 같거나 큰 경우: 리턴 false 
arr.includes('c',3); //false
arr.includes('c',100); //false

//from index < 0인 경우: from index + arr.length <= -1*arr.length이면 전체 배열이 검색된다
arr.includes('a',-100); //true -97 <= -3이므로 전체 배열에서 'a'가 존재하므로 true
arr.includes('b',-100); //true
arr.inlcudes('c',-100); //true
arr.includes('a',-2); //false (-2+3) <= -3이 성립하지 않으므로 false 
  • 배열에 배열 또는 값들 합치기: concat(), 배열리턴
const array1 = ['a','b','c'];
const array2 = ['d','e','f'];
const array3 = ['g','h','i'];

//배열에 값 이어붙이기 *중첩 배열 내부로 재귀하지 않는다.
return array.concat(1,[2,3]); //['a','b','c',1,2,3] 

//배열 두 개 합치기
return array1.concat(array2); //['a','b','c','d','e','f']

//배열 세 개 합치기
return array1.concat(array2,array3); //['a','b','c','d','e','f','g','h','i']
 
//기존 배열 복사하기
return array1.concat(); //['a','b','c'] 복사본 반환

원본배열 요소 복사방법 참고: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

  • 배열의 모든 요소를 문자열로 변환 후 연결해 하나의 문자열로 만들기: join(), 문자열 리턴
arr.join(seperator); //seperator는 생략가능하며, 생략 시 요소들이 쉼표로 구분되어 문자열로 리턴된다.

//arr.length===0이라면, 빈 문자열 반환
//요소가 undefined 또는 null일 경우 문자열로 변환하면 빈 문자열로 반환된다

let a = ['바람','비','불'];

a.join(); //'바람,비,불' 
a.join(', '); //'바람, 비, 불'
a.join(' + '); //'바람 + 비 + 불'
a.join(''); //'바람비불'

배열과 반복문


//for 반복문을 사용한 경우
let myNum = [10,20,40,10];
let sum = 0;

for(let i=0;i<myNum.length;i++)
{
  sum = sum+myNum[i]; 
}
return sum;

//for of 반복문을 사용한 경우
let myNum = [10,20,40,10];
let sum = 0;

for(let el of myNum)
{
  sum = sum+el;
}
return sum;

휴대폰 번호

0-9 사이의 정수를 요소로 갖는 배열을 입력받아 전화번호 형식의 문자열을 리턴한다. 배열의 길이가 8인 경우, 앞에 [0, 1, 0]이 있다고 가정한다.

//첫 번째 풀이
function createPhoneNumber(arr)
{
  if(arr.length===8)
  {
    const mid = arr.slice(0,4).join('');
    const last = arr.slice(4).join('');
    
    return `(010)${mid}-${last}`;
  }
  const first = arr.slice(0,3).join('');
  const mid = arr.slice(3,7).join('');
  const last = arr.slice(7).join('');
  
  return `(${first})${mid}-${last}`;
  
}

//두 번째 풀이
function createPhoneNumber(arr)
{
  let head = (010); //head를 기본 (010)으로 설정
  if(arr.length===11) //arr의 0~2번째 인덱스에 head 숫자가 있는 경우
  {
    head = `(${arr.slice(0,3).join('')})`; //새롭게 재할당시켜준다
  }
  
  const len = arr.length;
  
  const mid = arr.slice(len-8, len-4).join('');
  const last = arr.slice(len-4).join('');
  
  return `${head}${mid}-${last}`;
  

피보나치 수열

수(num)를 입력받아 num번째까지 총 num + 1개의 피보나치 수열을 리턴한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 피보나치 수부터는 바로 직전의 두 피보나치 수의 합으로 정의한다.

//첫 번째 풀이
function fibonacci(num){
  let output = [0,1]
  
  if(num===0)
  {
    return [0];
  }
  else if(num===1)
  {
    return output;
  }
  for(let i=0;i<num-1;i++)
  {
    output.push(output[i]+output[i+1]);
  }
  return output;
  
}

//두 번째 풀이
function(num){
  let output = [];
  for(let i=0;i<=num;i++)
  {
    if(i===0)
    {
      output.push[0];
    }
    else if(i===1)
    {
      output.push[1];
    }
    else
    {
      output.push(output[num-2]+output[num-1]);
    }
  }
  return output;
}
  
profile
어제보다 나은 오늘을 만드는 중

0개의 댓글