JavaScript, Vue.js, CSS/JavaScript

[JavaScript] 배열, 심볼

삶_ 2022. 6. 30. 22:38

 

배열(Array)

  • 순서가 있는 리스트
    • 문자, 숫자, 객체, 함수 등도 포함 가능
  • 반복문과 같이 생성, 나열할 때가 많음
  • let al = [a, b, … c]
    • a = al[0]
    • al.length : 배열 길이
    • al.push() : 배열 끝에 추가(여러요소도 가능)
    • al.pop() : 배열 끝 요소 제거
    • al.unshift() : 배열 앞에 추가(여러요소도 가능)
    • al.shift() : 배열 앞에 제거
let days = ["sun", "mon", "tue", "wed", "thu",]

//반복문을 통한 나열 (1)

for(let i=0; i<days.length; i++){
	console.log(days[i]);
}

//반복문을 통한 나열 (2)
//for ... of
// 보통 이걸 많이 사용함!

for(let day of days ){ //day는 배열의 요소를 의미하고, 아무 문자나 써도 상관없음
	console.log(day);
}
  • 그 외
    • arr.splice(n,m) : 인덱스 n부터 m개까지 제거
    • arr.splice(n,m,x) : 인덱스 n부터 m개까지 지우고 x를 추가함
      • arr.splice(1,3,100,200) : 1부터 3개까지 지우고 100,200을 그자리에 넣음
      • m이 0이면 딱 n번째 위치만 삭제됨
    • arr.splice(a, b) : 인덱스 a에서부터 b개 제거
    • arr.splice(a, b, c) : 인덱스 a에서부터 b개 제거후 제거한곳에 c 추가
let arr = [1,2,3,4,5];
let result = arr.splice(1,2);

console.log(result); //[2,3] 삭제된 요소들 반환됨
  • arr.slice(n,m) : n부터 m까지 반환(m번째 자리는 제외)
    • arr.slice() 는 arr의 전체를 반환
    • 반환이기 때문에 출력은 반환한 값이지만 원래 값의 변화는 없음
  • arr.concat(arr2,arr3 …) : 합쳐서 새 배열 반환
  • arr.forEach(function(name, index)) : 배열의 반복문
    • 매개변수를 3개 가진 함수를 인수받음.
    • 함수(해당요소, 인덱스, 해당 배열자체){…}
  • arr.join(a) : 배열 사이에 a를 삽입후 반환
  • arr.indexOf(m) : 가장 앞에서 나오는 m의 위치 알려줌
  • arr.indexOf(n, m) : n을 m의 인덱스부터 찾아 알려줌. (없으면 -1 반환)
  • arr.lastIndexOf(m) : 가장 뒤부터 먼저 나오는 m의 위치 알려줌 (없으면 -1 반환)

 

 

  • arr.reduce((누적값, 현재값, 현재인덱스, 이 함수를 호출한 배열) => {함수...}); 
    • 이전 콜백의 리턴값을 넘겨받아 어떤 작업을 수행하고 싶을 때 적합한 메서드
  • arr.includes(a,b) : a를 인덱스 b부터 검색하여 포함하는지 확인 (true / false 반환)
  • arr.find(함수) : 배열 내에서 함수에 true가 되는 대상을 첫번째로 발견하고 반환하고 끝
  • arr.findIndex(함수) : 위와 같은데 그 대상의 인덱스를 하나만 반환하고 끝
  • arr.filter(함수) : 만족하는 대상들만 찾아 배열로 반환함
  • arr.sort() : 오름차순으로 정렬 저장
    • 하지만 우리가 원하는 값으로 나오지 않음 (문자열로 취급하여 정렬하기 때문에)
    • 비교함수(연산진행)를 만들어 정렬 로직을 구현해야 함
    • arr.sort((a,b) => {
              return a-b; //내림차순이면 b-a
             });
  • arr.reverse() : 역순으로 재정렬 저장
  • arr.map(함수) : 함수를 받아 특정 기능을 시행하고 새로운 배열을 반환 및 저장

 

 

문자열

  • substr(1,4) : 인덱스 1에서 4개까지
  • substring(1,4) : 인덱스 1에서 인덱스 3까지

 

 

심볼

  • const a = Symbol();
  • 동일한 문자열로 만들어졌어도 서로 다른 심볼이다.
  • 프로퍼티 키를 심볼형으로 만들기
  • 유일한 식별자. (===, == 을 해도 다른 변수와 같아질수없음)
const id = Symbol('id');
const user = {
	name : "Mike",
	age : 30,
	[id] : 'myid'
}

>>출력시,
{name: "Mike", age: 30, Symbol(id): "myid"}

>>그런데, Object.keys(user)은
{"name","age"} 만 출력된다
${심볼변수명.description} 이렇게해야 출력됨

>>객체에 원본 key는 건드리지 않고 value만 수정할 수 있음
user[id] = 'myid'

 

Symbol.for()

  • 전역 심볼 생성 : 코드 어디든 사용이 가능
  • 하나의 심볼만 보장받을 수 있음
  • 같은 심볼을 서로 공유함
const id1 = Symbol.for('id');
const id2 = Symbol.for('id');

//일때, id1 === id2
//같은 객체가 같은 심볼을 공유함

Symbol.keyFor(id1)
//"id" 출력.
//심볼 생성시 정했던 key 값을 반환해줌

//전역 심볼이 아닌 다른 심볼의 key값을 알아내는 법
const id = Symbol('id 입니다')
id.description;
//"id 입니다" 출력

 

 

 

숫자 메서드

toString()

  • 10진수 → 2진수/16진수
let num = 10;

num.toString(); //10진수
num.toString(2); //2진수
num.toString(16); //16진수

올림/내림

  • 올림/내림할 숫자와 관계없이 올리거나 내림.
  • Math.ceil() : 올림
    • let num = 5.1
    • Math.ceil(num); //6
  • Math.floor() : 내림
    • let num = 5.1소수점을 없애고 싶을때 사용한다
    • Math.floor(num); //5
  • Math.round() : 반올림
  • Math.random() : 0~1 사이 무작위 숫자 생성

소수점 자릿수

  • 소수점 둘째자리까지 표현하기
    • let user = 30.1234;
    • Math.round(user * 100)/100
  • toFixed() 이용하기
    • user.toFixed(2);
    • user.toFixed(0); //30
    • user.toFixed(6); //30.123400
    • 단 toFixed()는 결과값을 문자열로 반환하기 때문에,
    • 결과에 Number(user.toFixed(6)); 을 ㄹ붙여 숫자로 변환한 값을 반환하게 한다

isNaN()

  • NaN인지 확인함
    • let x = Number(’x’); //NaN일때(’x’는 문자기 때문에 숫자가 아님)
    • isNaN(x) //true

parseInt()

  • 문자 → 숫자
  • Number(문자) 과 같음 (하지만 parseInt가 더 많이 쓰이)
  • 읽을수있는 부분만 숫자로 바꿈
    • let m = ‘10px’;
    • parseInt(m); //10
    • let red = ‘f3’;parseInt(red, 16) //하지만 이렇게 문자를 16진수로 바꿀수도 있음
    • parseInt(red); //NaN을반환 (숫자로 시작하지 않으면)

parseFloat()

  • 문자 → 숫자(실수(소수점까지출력))

 

 

 

문자열 메소드

여러줄 출력

  • 줄바꿈 하려면 \n 을 써야함
  • 한줄에 몰아서 넣기 (엔터 포함하지 않음)

그 외

  • a. length : 문자열 길이
  • a[2] : 문자열 내 3번째 위치한 것
  • toUpperCase() : 대문자
  • toLowerCase() : 소문자
  • a.indexOf(’mm’) : 문자열 ‘mm’이 a 내에 어느 위치에 포함되어 있는지
    • 없으면 -1 반환
  • a.slice(n,m) : n부터 m까지.
    • a.slice(n) : n부터 끝까지
    • a.slice(2, -2) : 2부터 (끝에서-2)번째 까지
  • a.substring(n,m) : n과 m사이 문자열 반환 (음수는 0으로 인식함. 순서 바꿔도 차례대로)
  • a.substr(n,m) : n부터 m개를 가져옴
  • a.trim() : 앞 뒤 공백 제거
  • a.repeat(n) : 문자열 a를 n번 반복함

 

아스키코드 변환

  • 문자 → 숫자
    • “a”.codePointAt(0); //97
  • 숫자 → 문자
    • String.fromCodePoint(97); //”a”