문제풀면서 자주 & 유용하게 쓰였던 메소드 모음!!!

백돼지·2023년 3월 29일
0
post-thumbnail

str.replace() : 문자열에서 특정 문자 제거 또는 바꾸기

1. str.replace(/바꾸려는 문자/ , 바뀐 문자)


<예시>
let str = "안녕안녕"
str.replace(/안/, "반");	//"반녕안녕"
str.replace(/안/g, "반"); //"반녕반녕"
str.replace(/안/g, ""); //"녕녕"	<--이렇게 제거도 가능!!	

*여기서 바꾸려는 문자옆에 g를 붙이면 문자열 내에 있는 모든 /바꾸려는 문자/를 바꾼다.
*g를 붙이지 않으면 첫번째 /바꾸려는 문자/만 바꿈!!






1-1. str.replace(/[바꾸려는 문자들(공백없이 적어야함)]/g, 바뀐 문자)

<예시>
let str = "안녕하세요"
str.replace(/[안하요]/g, "");  //"녕세"

*바꾸고자 하는 문자가 여러개인 경우 이렇게 배열 형태로 "공백없이" 넣은 후, 
*반드시 "g"를 넣어야 모두 바꾸고자 하는 문자로 바뀐다!





1-2 str.replace(new RegExp(변수, "g"), 바뀐 문자)

<예시>
let str = "안녕안녕";
let obj = "안";

str.replace(new RegExp(obj, "g"), "반");	//"반녕반녕"

*바꾸려는 문자가 "변수"라면 new RegExp 라는 정규표현식 생성자 함수를 사용해서 넣으면 된다.
"g"를 넣는건 1-1과 원리가 동일하다.

*기존의 문법과 살짝 다르기 때문에 조심!!





1-3 const obj = {a:0, b:1, c:2}일때,
str.relpace( / 바꿀문자 | 바꿀문자2 | 바꿀문자3 /g, (el) => obj[el] )


문제를 풀다가 replace의 두번째 인자로 함수를 넣을 수 있다는 것을 알게되었다.
obj에 특정 단어를 바꿀 문자가 차례대로 있을때,
(el)=>obj[el] 으로 함수의 전달인자가 바꿀문자(요소)가 되어 차례로 obj의 a인 0을 불러온다.

<예시>
const obj = {a:0, b:1, c:2};
let str = "abc";

let result = str.replace( /a|b|c/g, (el) => obj[el] );
result //"012"

.toString() : 모든 데이터타입을 문자열로 바꾸기

1. 데이터.toString()	//소괄호 안에 아무것도 넣지 않는다.


<예시>
let num = 32122;
let str = num.toString()	//"32122"


*솔직히 String(num)이 더 간단한 듯 하여 둘 중에 어느것을 써야하는지 찾아보았는데,
.toString()String()은 사용하는 용도가 살짝 다르다.

예를들어, nullundefined 같은 경우는, .toString()을 사용하면 TypeError가 발생하지만,
String()을 사용하면 "null""undefined"로 반환한다., 정말 일반적인 값의 "문자열 변환"을 원한다면 String(),
객체의 문자열 표현을 원한다면 .toString()을 쓰는것이 좋다.

Str/Arr.indexOf() : 문자열/배열 안에 특정 값이 있는지의 여부 알기

1. str.indexOf(찾으려는 문자열, str에서 찾기 시작하는 인덱스 위치)


<예시>
let str = "Hello"
let findStr = "Hel"

str.indexOf(findStr)	//0	(찾으려는 문자열이 있는 첫번째 인덱스를 반환한다.)
str.indexOf("Hel")	    //0
str.indexOf("hel")		//-1 (indexOf는 대소문자를 구분한다. 찾으려는 문자열이 없으면 -1을 반환한다.)
str.indexOf("l")	//2
str.indexOf("l",2)	//3	(인덱스 2의 위치인 He"l"lo부터 시작해서 "l"를 찾는다.

Number.isInteger() : 정수인지 판별하기 (*integer: 정수)

Math.sqrt() : 제곱근 구하기

1. Number.isInteger(판별할 숫자)	//결과값을 불린형으로 반환한다.
   Math.sqrt(제곱근을 구할 숫자)


<예시>
문제를 풀때 주어진 수가 제곱수(:어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라 함)인지 아닌지
판별하는 문제가 있었는데, 이럴때 사용하기 좋은것 같다.

let num = 144;
return Number.isInteger(Math.sqrt(num)) ? 1 : 2
//num의 제곱근이 정수라면 1을 반환 : 아니라면 2를 반환
//정수라면 소수점이 없으므로 제곱수이기 때문

Math.pow() : 제곱하기

1. Math.pow(제곱할 수, 제곱근)


<예시>
Math.pow(3,4)	//81

<예시2>
let num = 5;
num * Math.pow(2,3)	//40

문제에서 특정 값의 제곱한 수를 구할때 위 메소드를 쓰면 간단하게 해결 가능하다.

구조분해할당

배열 또는 객체의 값에 각각 변수를 지정해 함수에서 간단하게 사용 가능하다.


<예시 - 배열>
let arr = [100,200,300];
let [num1, num2, num3] = arr;

num1; 	//100
num2; 	//200
num3; 	//300

배열은 각 인덱스의 위치에 따라 값이 지정되기 때문에 순서가 중요하다.


<예시 - 객체>
let obj = {name: "yong", age: 17, male: true};
let {male, age, name} = obj;
//let male = obj.male, let age = obj.age... 과 동일하다

male;	//true
age;	//17
name;	//"yong"

객체는 속성의 key값을 변수의 이름으로 받기 때문에 위치에 상관없이 그 key의 value가 반환된다.


<예시2 - 객체 >
!!구조분해할당은 아님!!
만약 객체의 값이 변수라면, 객체의 key와 value의 이름이 똑같기 때문에 간결하게 표현이 가능하다.
let name = "yong";
let age = 17;
let male = true;

let obj = {name: name, age: age, male: male};
let obj = {name, age, male} //이렇게 축약해서 작성 가능하다.

Math.max() : 최대값 구하기

1. Math.max(숫자1, 숫자2, 숫자3...)


<예시>
Math.max(1,2,3);	//3
Math.max(-1,-2,-3);	//-1


<예시- 배열>
let arr = [1,2,3];
Math.max(...arr);	//3

arr을 스프레드 연산자로 넣어야 하는 이유는 Math.max는 배열은 처리하지 못하기 때문이다.
따라서 스프레드 연산자로 배열을 풀어서 인자로 배열의 요소들을 넣으면 Math.max(1,2,3)과 동일한 
결과를 얻을 수 있다.

arr.join() : 배열의 요소들을 문자열로 합치기

1. arr.join(구분자)


<예시>
let arr = ["안","녕","하","세","요"];

arr.join();		//"안,녕,하,세,요"
arr.join("")	//"안녕하세요"

str.split() : 문자열을 구분자를 이용해 나누어 배열에 담기

1. str.split(구분자)
*배열을 반환한다는 점 명심!


<예시>
let str = "안녕하세요 반갑습니다";

str.split();	//["안녕하세요 반갑습니다"]
                *  문자열을 배열로 반환한다는 점에서 [...str]과 비슷해보이지만 str.split()은 문자열을 통쨰로
                배열로 반환하고, 스프레드 문법은 한글자씩 배열의 요소로 넣은 배열을 반환한다.
str.split(" ")	//["안녕하세요", "반갑습니다']
				//공백을 구분자로 사용함
             

2. str.split(갯수를 찾을 문자).length - 1

*split()의 인자에 구분자를 넣을 수 도 있지만 특정 문자가 몇개 들어있는지도 확인할 수 있다.
갯수를 찾을 문자를 인자로 주고, 그 문자로 문자열을 나눈 뒤 반환 된 배열의 길이에서 1만 빼주면 된다!!!



<예시> 아래 예시는 str에서 3,6,9가 몇개가 있는지 알아내는 예시이다.
let str = "234769";
let result = str.replace(/["3"|"6"|"9"]/g, "답");	//"2답47답답"

result.split("답").length - 1;	//3



3. str.split(/[a-z|A-Z]+/);

*정규표현식 형태인 /[a-z|A-Z]+/ 을 인자로 넣으면 대.소문자 알파벳를 모두 구분자로 사용할 수 있다. 
인자 마지막의 +는 반복을 의미하는 메타문자라고 한다. 당연히 /[a-z]+/ , /[A-Z]+/ 처럼 대.소문자 각각 사용할 수도 있다.

*이는 split 뿐만 아니라 replace나 match, text등에도 쓸 수 있다.

<예시>
let str = "aA1bB2";
str.split(/[a-z|A-Z]+/);	//['', '1', '2']

Set : 중복 제거하기

1. new Set(중복을 제거하려는 데이터)
*Set은 생성자 함수로 중복 된 값을 가지지 않는 고유한 Set 객체를 만들 수 있다.


<예시>
let arr = [1,2,3,2,1];
new Set(arr);  //{1,2,3}


<예시2 - 문자열 일때>
let str = "people";
new Set(str)  //{"p", "e", "o", "l"}

str.match(정규표현식) : 특정 숫자의 길이만큼 나누기

match()는 전달인자로 넣은 문자열이 있다면 배열로 반환한다.

<예시>
str = "apple";
str.match("p");	//["p"]
str.match(/p/g); //["p", "p"] (전역검색을 하려면 정규표현식 사용)


그 외에도 new RegExp를 이용한 정규표현식으로 match를 사용하면 원하는 숫자의 길이만큼
나눈 배열을 반환할 수 있다.

<예시 - 정규표현식>
let str = "appleapple";
let n = 3;
str.match(new RegExp(`.{1,${n}}`, "g"));	//['app', 'lea', 'ppl', 'e']

**정규표현식을 사용할떄 주의할 점**
.은 아무 문자나 나누겠다는 뜻이다!! . 백틱 안에 쓰면 되고,
.대신에 "p"를 적는다면 "p"만 나누어지지만 
그건 이 예시에는 필요없는 내용이기 때문에 그냥 .만 쓴다고 생각하면 된다.

{1,${n}}을 쓸때 이 두개 숫자(변수)사이에 공백이 있어서는 `절대 안된다`.

만약 변수를 쓰지 않는다면
str.match(new RegExp(".{1,3}", "g")); 이렇게 쓰면 된다.
profile
용호의 코딩블로그 22.11 코딩공부 시작 23.2 부트캠프 입소

0개의 댓글