- a%b를 재귀적으로 반복하여 GCD 추출 (유클리드호제법)
- (a*b)/GCD
Array.reduce((pre, cur) => pre + cur);
array의 모든 값을 더할 때 많이 사용
pre : 이전 index에서의 연산의 return 값
cur : array의 n번째 index의 값
-
소수들을 대량으로 빠르고 정확하게 구하는 알고리즘
-
에라토스테네스의 체 원리
- 소수를 판별할 범위만큼 배열을 할당하여 해당하는 값 삽입
- 2부터 시작해서 특정 수의 배수에 해당하는 수를 모두 지운다.(자기 자신은 X)
- 2부터 시작하여 남아있는 수를 모두 출력
-
배열의 길이가 n일때, √n 보다 큰 값의 배수는 이미 삭제된 숫자이기에 √n이하 수의 배수를 지운다
-
기준 문자열과 비교했을 때 비교 대상 문자열이 정렬상 전에 오는지, 후에 오는지 혹은 같은 순서에 배치되는지를 알려주는 숫자를 리턴
-
기존 문자열의 우선 순위가 더 높다면 -1
-
기존 문자열의 우선 순위가 더 낮다면 +1
-
같은 우선 순위(같은 문자열)이라면 0
"a".localeCompare("c"); // -1 "check".localeCompare("against"); // 1 "a".localeCompare("a"); // 0
-
-
배열의 특정 인덱스에서 다른 특정인텍스까지가 담긴 새로운 배열을 뽑아내는 기법
-
substr(), substring(), slice() 존재
-
substr()은 오래된 함수로 사용을 권장하지 않음
-
substring과 slice 사용을 권장하는데 이 중 slice는 음수를 통한 슬라이딩이 가능하므로 사용을 권장함
-
배열의 시작 인덱스부터 끝 인덱스의 이전까지 하나의 값으로 채움
-
구문
arr.fill(value, start, end]])
-
value : 배열을 채울 값.
-
start
Optional
: 시작 인덱스, 기본 값은 0. -
end
Optional
: 끝 인덱스, 기본 값은this.length
.
-
-
start와 end는 음수를 사용할 수 있으며 음수를 사용할 시 (length+start), (length+end)를 의미한다
-
예시
const array1 = [1, 2, 3, 4]; console.log(array1.fill(0, 2, 4)); // expected output: [1, 2, 0, 0] // fill with 5 from position 1 console.log(array1.fill(5, 1)); // expected output: [1, 5, 5, 5] console.log(array1.fill(6)); // expected output: [6, 6, 6, 6] console.log(array1.fill(8, -2)); // expected output: [1, 2, 8, 8] console.log(array1.fill(9, -3, -1)); // expected output: [1, 9, 9, 4]
- 판별 함수를 만족하는 첫 번째 요소의 값을 반환한다
- 만족하는 요소가 없다면
undefined
를 반환한다
const array1 = [5, 12, 8, 130, 44];
const found = array1.find((element) => element > 10);
console.log(found);
// expected output: 12
- array에 key, value로 저장 가능
- 단 property이기에 forEach를 통해 key, value를 얻지는 못한다
str.padStart(targetLength [, padString])
- targetLength
- 목표 문자열 길이
- 현재 문자열의 길이보다 작다면 채워넣지 않고 그대로 반환
- padString
- 현재 문자열에 채워넣을 다른 문자열
- 문자열이 너무 길어 목표 문자열 길이를 초과한다면 좌측 일부만을 넣음
- 기본값은 " "
str.padEnd(targetLength [, padString])
-
targetLength
-
목표 문자열 길이
-
현재 문자열의 길이보다 작다면 채워넣지 않고 그대로 반환
-
-
padString
-
현재 문자열에 채워넣을 다른 문자열
-
문자열이 너무 길어 목표 문자열 길이를 초과한다면 좌측 일부만을 넣음
-
기본값은 " "
-
- 어떤 패턴에 일치하는 일부 또는 모든 부분이 교체된 새로운 문자열을 반환
// 구문
var newStr = str.replace(regexp|substr, newSubstr|function)
-
regexp (pattern)
newSubStr
로 대체 될 정규식 -
substr (pattern)
newSubStr
로 대체 될String
. 정규식이 아닌 글자 그대로의 문자열로 처리 -
newSubStr (replacement)
첫번째 파라미터를 대신할 문자열
-
function (replacement)
주어진
regexp
또는substr
에 일치하는 요소를 대체하는 데 사용될 새 하위 문자열을 생성하기 위해 호출되는 함수
-
문자열의 시작을 표현
-
[ ... ]
내부에서 쓰이는 경우라면 뒤의 패턴에 일치하지 않는 것을 선택한다^http : 문자열이 http로 시작하는 경우에만 매치하며, 중간에 나타난 http에는 매치하지 않는다. ab[^0-9]: “ab” 뒤에 숫자가 아닌 것이 오는 것에만 매치한다. (“abc” – O, “ab1” – X)
-
문자열의 끝을 표현
them$ : 문자열이 “them”으로 끝난 경우에만 해당 “them”에 매치한다.
-
단어의 경계를 의미
-
문자열 시작과 끝, 공백, 개행, 탭, 콤마, 구두점, 대시문자 등
\bplay\b : 단어 경계로 구분되는 “play”에는 매치한다. 하지만 “playground”의 “play”에는 매치하지 않는다.
-
\b
가 아닌것\bplay\B : “play”뒤에 단어의 경계가 아닌 것이 올 때에만 매치 “playground”, “playball”의 “play”에 매치한다 <!-- 뒤에 오는 문자는 포함하지 않는다 -->
- 공백 문자 및 탭 문자에 매치
- 공백 문자가 아닌 한 글자에 매치
- 숫자에 매치
- **
[0-9]
**와 같다
- 숫자가 아닌 문자에 매치
- **
[^0-9]
**와 같다.
-
단어를 만들 수 있는 글자에 매치
-
알파벳 대소문자, 숫자, 언더스코어를 포함 (=[A-Za-z0-9_])
- **
\w
**에 포함되지 않는 문자들에 매치
- 개행문자
-
이스케이프용 문자
-
정규식 상의 특별한 의미가 있는 문자들을 문자 그대로 쓸 때 앞에 붙인다
\^ 라고 쓰면 “^” 문자 그대로를 가리킨다.
- 아무 문자 1개에 대응된다.
- 공백 역시 문자 1개로 취급된다.
|
문자를 이용하면A | B
의 패턴으로 A 혹은 B에 매칭할 수 있다
- 대괄호속에 넣은 문자 중에서 하나에 매칭
[cfh]all
이라는 패턴은call
,fall
, **hall
**에 모두 매치될 수 있다
-
특정 범위를 표현
숫자의 경우 [0-9] 알파벳 소문자의 경우 [a-z] 알파벳대문자의 경우 [A-Z] 유니코드를 지원하는 정규식에서는 [ㄱ-힣]로 한글 한 글자에 매칭하는게 가능
- 선택 패턴 내에서 사용하면 not의 의미가 되어 뒤에 오는 문자들을 제외한다
[^cfh]all
은 앞서 나온call
,fall
, **hall
**에는 매치하지 않으며 **mall
**에는 매치하게 된다.
-
괄호**
( )
**로 둘러싼 단위는 그룹을 나타낸다 -
그룹은 전체 패턴 내에서 다시 하나로 묶여지는 패턴 조각을 나타낸다
-
|
나 뒤에 수량 한정자를 그룹에 붙이는 형태로 많이 사용 -
한 번 매치한 그룹이 다시 반복되어 나타나는 경우에도 사용할 수 있다.
(tom|pot)ato : tomato, potato에 모두 매치되는 패턴을 그룹을 써서 좀 더 줄였다. (a|i){3}bc : a 혹은 i가 3개 온 후에 bc가 오는 패턴. aaabc, iiibc, aiabc, aaibc 등에 매치된다.
- 동일한 글자 혹은 동일한 족(family)이 n 개 만큼 나오는 경우에 수량한정자를 뒤에 붙일 수 있다.
-
바로 앞의 글자 혹은 그룹이 1개 혹은 0개이다
`apples?` : `s?`는 “s”가 있을 수도 있고, 없을 수도 있다는 의미로, “apple”, “apples” 모두에 매치
-
0개 이상이다
n\d* : n 뒤에 숫자가 0개 이상이라는 의미. "n", “n1”, “n123” 에 모두 매치된다.
-
1개 이상이다.
n\d+ : “n” 뒤에 숫자가 1개 이상이다. “n1”, “n123″에 매치되지만 “n” 에는 매치되지 않는다. <!-- *인 경우 n도 매치됨 -->
-
n 개가 있다
n\d{2}$ : “n”뒤에 숫자가 2개 있다. “n12” 에 매치되지만, “n”, “n1”, “n123″에는 매치되지 않는다 n\d{2}라고 했을 때에 “n123″에서는 n12까지만 매치하고 3은 제외한다.
-
n개 이상, m개 이하가 있다.
-
m
은 생략 가능하며, 생략되면 n개 이상을 의미한다n\d{2, 3}$ : “n12” , “n123″에는 매치되지만 “n1″이나 “n1234″에는 매치되지 않는다.
- 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자
비트연산자 | 설명 |
---|---|
& | 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산) |
| | 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산) |
^ | 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산) |
~ | 비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산) |
<< | 지정한 수만큼 비트들을 전부 왼쪽으로 이동시킴. (left shift 연산) |
>> | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산) |
- Not A Number(숫자가 아님)을 나타내는 전역 객체의 속성
- Number.NaN과 동일하다
NaN
은 다른 모든 값과 비교(==
,!=
,===
,!==
)했을 때에도 같지 않고, 다른NaN
과도 같지 않다.
NaN을 반환하는 경우 | ex) |
---|---|
숫자로서 읽을 수 없는 경우 | parseInt('blahblah'), Number(undefined) |
결과가 허수인 수학 계산식 | Math.sqrt(-1) |
피연산자가 NaN 인 경우 |
(7 ** NaN) |
정의할 수 없는 계산식 | (0 * Infinity) |
문자열을 포함하면서 덧셈이 아닌 계산식 | ("안녕" / 3) |
-
두 함수 모두 값이 NaN인지를 판별한다
-
차이점
isNaN() Number.isNaN 인자로 들어온 값을 number로 변환한 이후 NaN이라면 true를 반환한다 인자로 들어온 값이 NaN이어야만 true를 반환 isNaN("js") // true Number.NaN("js") // false
- key와 value를 배열 형태로 return함