.repeat
let s = 'abcde'
s.repeat()
''
s.repeat(2)
'abcdeabcde'
s.repeat(2.5) // 소수점은 유효하지 못함
'abcdeabcde'
Array
+ .repeat
여기서 iterable한 값을 받게 되면, 분해해서 넣어줍니다.
'가나다' -> '가', '나', '다'
//repeat은 array생성할 때 실무에서 많이 씀
Array.from('a'.repeat(10))
// Array.from('aaaaaaaaaa') 와 같다
['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
// 이터러블한 녀석들은 분해해서 넣어줌
let s = 'abcde';
Array.from(s.repeat(10))
['a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e']
Array(10) // 빈 배열이 만들어 진다. 빈게 10개가 들어가 있음
[empty × 10]
// 변수를 선언하고 빈 배열을 할당해보자.
let emptyArray = Array(10)
emptyArray[0] // 그래서 값을 보려고 찍어보면 undefined가 나옴
undefined
emptyArray[3] = undefined // 그렇다면, 직접 할당을 하면 뭐가 다를까?
undefined
emptyArray // 뭔가 살짝 변한게 보인다. 엄밀히는 달라 보인다.
(10) [empty × 3, undefined, empty × 6]
Array(10).fill(1000) // 10개의 순서에 숫자 1000으로 채우겠다.
(10) [1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000]
Array(5).fill('str') // 5개의 순서에 문자열 'str'로 채우겠다
(5) ['str', 'str', 'str', 'str', 'str']
// (value, index)는 값과 순서를 의미하는 곳이라는 뜻이다.
// 표현이 이상하긴 하지만, (x, y)로 넣어도 값은 그대로일 것이다.
Array(10).fill(0).map((value, index) => value + index)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// 1부터 제곱의 수들로 배열을 채우고 싶다.
Array(10).fill(1).map((value, index) => (value + index)**2)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
// 다른 방법이지만, 제곱의 수들로 배열을 채우는 방법
Array(100).fill(0).map((value, index) => (index + 1)**2)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304, 2401, 2500, 2601, 2704, 2809, 2916, 3025, 3136, 3249, 3364, 3481, 3600, 3721, 3844, 3969, 4096, 4225, 4356, 4489, 4624, 4761, 4900, 5041, 5184, 5329, 5476, 5625, 5776, 5929, 6084, 6241, 6400, 6561, 6724, 6889, 7056, 7225, 7396, 7569, 7744, 7921, 8100, 8281, 8464, 8649, 8836, 9025, 9216, 9409, 9604, 9801, 10000]
.split
문자열 -> 배열로 전환하는 방법
괄호안의 문자열을 찾아서 구분해주고 배열로 만들어준다.
'가s나s다라s나마s나'.split('s')
['가', '나', '다라', '나마', '나']
'.'.split('.') // 형태가 요상하지만, .을기준으로 뒤에 공백이 있기에
['', ''] // 이렇게 나온다
'.'.repeat(9).split('.')
// '.........'.split('.')과 같다
['', '', '', '', '', '', '', '', '', '']
// 문자열 -> (쪼개서) 배열로!
let s = 'weniv CEO hojun.lee'
s.split(' ')
(3) ['weniv', 'CEO', 'hojun.lee']
s.split('.')
(2) ['weniv CEO hojun', 'lee']
s.split(/\s/) // 이스케이프문자도 사용이 가능하다
(3) ['weniv', 'CEO', 'hojun.lee']
s.split('')
(19) ['w', 'e', 'n', 'i', 'v', ' ', 'C', 'E', 'O', ' ', 'h', 'o', 'j', 'u', 'n', '.', 'l', 'e', 'e']
//
'12345'.split('')
['1', '2', '3', '4', '5']
'12345'.split('').forEach(x => x)
undefined // 순회는 하지만 새로운 배열을 뱉어내지는 않는다!
'12345'.split('').forEach(x => parseInt(x))
undefined // 순회는 하지만 새로운 배열을 뱉어내지는 않는다!
'12345'.split('').map(x => parseInt(x))
[1, 2, 3, 4, 5] // map은 새로운 배열을 뱉어내는 방법!
let result = 0;
'12345'.split('').map(x => result += parseInt(x))
[1, 3, 6, 10, 15] // 1, 1+2, 1+2+3, 1+2+3+4, 1+2+3+4+5
result
15 // 요거는 쪼끔 방법이 이상했어서 아래로 다시 변경!!
let sum = 0;
'12345'.split('').forEach(x => sum += parseInt(x));
sum
15
[1,2,3,4,5].map(x=>2*x) //
[2, 4, 6, 8, 10]
2 ** 3 ** 2 // 3 ** 2가 먼전 실행된다.
512
(2 ** 3) ** 2 // 괄호로 감싸주어야 함
64
// 똑같은걸 Math를 사용해서 해보기
Math.pow(2, 3)
8
Math.pow(Math.pow(2, 3), 2)
64
let today = new Date()
today // 오늘 날씨 찍어보기
>Mon Dec 06 2021 10:36:13 GMT+0900 (한국 표준시)
today.toString() // 오늘 날씨를 문자열로!
'Mon Dec 06 2021 10:36:13 GMT+0900 (한국 표준시)'
today.toLocaleString() // 지역에 맞는 문자열로
'2021. 12. 6. 오전 10:36:13'
today.toLocaleDateString() // 지역에 맞는 문자열로 날짜까지..
'2021. 12. 6.'
today.toLocaleString('ko-kr') // 지역을 지정해줄 수 있다.
'2021. 12. 6. 오전 10:36:13'
today.toLocaleString('ja-JP')
'2021/12/6 10:36:13'
today.toLocaleString('en-US')
'12/6/2021, 10:36:13 AM'
today.toTimeString()
'10:36:13 GMT+0900 (한국 표준시)'
today.toISOString()
'2021-12-06T01:36:13.089Z'
// 년도 월 일 뽑아내보기
today.toISOString().slice(0, 4) // 0번부터 4번 앞에까지!
'2021'
today.toISOString().slice(5, 7)
'12'
today.toISOString().slice(8, 10)
'06'
today.toISOString().slice(0, 10).split('-')
['2021', '12', '06']
today.toISOString().slice(0, 10).split('-').map(x => parseInt(x))
[2021, 12, 6] // parseInt활용해서 배열안에 숫자로 저장하기
Math.PI
3.141592653589793
Math.SQRT2 // 2 ** 0.5
1.4142135623730951
Math.ceil(9.2) // 올림
10
Math.ceil(9.6)
10
Math.ceil(-9.6)
-9
Math.ceil(-9.2)
-9
Math.floor(0.2) // 내림
0
Math.floor(0.9)
0
Math.floor(-9.3)
-10
Math.floor(-9.9)
-10
Math.round(3.3) // 반올림
3
Math.round(3.6)
4
Math.max() // 마이너스 무한대를 뽑아내기
-Infinity
Math.min() // 무한대 뽑아내기
Infinity
Math.max(1, 2, 3, 11) // 최대값 뽑아내기
11
Math.min(1, 2, 3, 11)
1
Math.max([1, 2, 3, 4, 5, 5, 6]) // 배열을 넣으면 NaN
NaN
Math.max(...[1, 2, 3, 4, 5, 5, 6]) // 전개표현으로 펴준다!
6
Math.max.apply(null, [1, 2, 3, 4, 5, 5, 6])
6
// reduce
undefined
let arr = [1, 2, 3, 4, 5];
let result = arr.reduce((sum, current) => sum + current, 0);
alert(result); // 15
undefined
let arr = [1, 2, 3, 4, 5];
let result = arr.reduce((sum, current) => sum + current);
console.log(result);
VM4263:5 15
undefined
let arr = [1, 2, 3, 4, 5];
let result = arr.reduce((sum, current) => sum * current);
console.log(result);
VM4273:5 120
undefined
0.3 + 0.6
0.8999999999999999
Number.EPSILON // 이것만큼의 오차는 JS에서 언제든 발생가능하니 허용시켜주겠다(연산의 오차)
2.220446049250313e-16
[1, 2, 3, 4, [1, 2, 3]].flat()
>[1, 2, 3, 4, 1, 2, 3]
[1, 2, 3, 4, [1, 2, 3]].flat(1)
>[1, 2, 3, 4, 1, 2, 3]
[1, 2, 3, 4, [1, 2, 3]].flat(2)
> [1, 2, 3, 4, 1, 2, 3]
[1, 2, 3, 4, [1, 2,[1, 2, 3]]].flat()
> [1, 2, 3, 4, 1, 2, Array(3)] // 한번 더 펴줘야한다
[1, 2, 3, 4, [1, 2,[1, 2, 3]]].flat(2)
> [1, 2, 3, 4, 1, 2, 1, 2, 3]
[1, 2, 3, 4, [1, 2,[1, 2, 3]]].flat().flat()
> [1, 2, 3, 4, 1, 2, 1, 2, 3]
[1, 2, 3, 4, [1, 2,[1, 2, 3]]].flat(Infinity) // 다 피겠다
> [1, 2, 3, 4, 1, 2, 1, 2, 3]