배열의 기본
//배열 선언하기
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); //추가된 마지막 요소 포함 배열의 길이 리턴
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값 리턴
let myNumber = [[1,2],[3,4],[5,6]];
Array.isArray(myNumber); //true
Array.isArray(123); //false
let arr = "i love coding";
arr.split(" "); //["i", "love", "coding"];
arr; //"i love coding"
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 리턴
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
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
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;
}