# * Learning JavaScript - ๋ฐฐ์ด 1ํธ
์ด ํฌ์คํ ์ Learning JavaScript์ 8์ฅ(๋ฐฐ์ด๊ณผ ๋ฐฐ์ด ์ฒ๋ฆฌ)์ ์ฐธ๊ณ ํ์ฌ ์์ฑ ๋์๋ค.
# ๋ฐฐ์ด์ ๊ธฐ์ด
๋ฐฐ์ด์ ๊ธฐ๋ณธ์ ์ธ ์ฌํญ์ ๋ ์ฌ๋ ค ๋ณด์.
- ๋ฐฐ์ด์ ๊ฐ์ฒด์ ๋ฌ๋ฆฌ ๋ณธ์ง์์ ์์๊ฐ ์๋ ๋ฐ์ดํฐ ์งํฉ์ด๋ฉฐ 0์ผ๋ก ์์ํ๋ ์ซ์ํ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐฐ์ด์ ๋น๊ท ์ง์ (nonhomogeneous)์ด๋ค. ์ฆ, ํ ๋ฐฐ์ด์ ์์๊ฐ ๋ชจ๋ ๊ฐ์ ํ์ ์ผ ํ์๋ ์๋ค. ๋ฐฐ์ด์ ๋ค๋ฅธ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ ํฌํจํ ์ ์๋ค.
- ๋ฐฐ์ด ๋ฆฌํฐ๋ด์ ๋๊ดํธ๋ก ๋ง๋ค๊ณ , ๋ฐฐ์ด ์์์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ ๋๋ ๋๊ดํธ๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ชจ๋ ๋ฐฐ์ด์๋ ์์๊ฐ ๋ช ๊ฐ ์๋์ง ๋ํ๋ด๋
length
ํ๋กํผํฐ๊ฐ ์๋ค. - ๋ฐฐ์ด์ ๋ฐฐ์ด ๊ธธ์ด๋ณด๋ค ํฐ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด์ ์์๋ฅผ ํ ๋นํ๋ฉด ๋ฐฐ์ด์ ์๋์ผ๋ก ๊ทธ ์ธ๋ฑ์ค์ ๋ง๊ฒ ๋์ด๋๋ฉฐ, ๋น ์๋ฆฌ๋
undefined
๋ก ์ฑ์์ง๋ค. Array
์์ฑ์๋ฅผ ์จ์ ๋ฐฐ์ด์ ๋ง๋ค ์๋ ์์ง๋ง ๊ทธ๋ ๊ฒ ํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ๋ณ๋ก ์๋ค.
// ๋ฐฐ์ด ๋ฆฌํฐ๋ด
const arr1 = [1, 2, 3]; // ์ซ์๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด
const arr2 = ['one', 2, 'three']; // ๋น๊ท ์ง์ ๋ฐฐ์ด
const arr3 = [[1, 2, 3], ['one', 2, 'three']]; // ๋ฐฐ์ด์ ํฌํจํ ๋ฐฐ์ด
const arr4 = [ // ๋น๊ท ์ง์ ๋ฐฐ์ด
{
name: 'Fred',
type: 'object',
luckyNumbers: [5, 7, 13],
},
[
{
name: 'Susan',
type: 'Object',
},
{
name: 'Anthony',
type: 'Object',
},
],
1,
() => {
return 'arrays can contain functions too';
},
'three'
];
// ๋ฐฐ์ด ์์์ ์ ๊ทผํ๊ธฐ
arr1[0]; // 1
arr1[2]; // 3
arr3[1]; // ['one', 2, 'three']
arr4[1][0]; // { name: 'Susan', type: 'object' }
// ๋ฐฐ์ด ๊ธธ์ด
arr1.length; // 3
arr4.length; // 5
arr4[1].length; //2
// ๋ฐฐ์ด ๊ธธ์ด ๋๋ฆฌ๊ธฐ
arr1[4] = 5;
arr1; // [1, 2, 3, undefined, 5]
arr1.length; // 5
// ๋ฐฐ์ด์ ํ์ฌ ๊ธธ์ด๋ณด๋ค ํฐ ์ธ๋ฑ์ค์ ์ ๊ทผํ๋ ๊ฒ๋ง์ผ๋ก ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๋์ด๋์ง๋ ์๋๋ค.
arr2[10]; // undefined
arr2.length; // 3
// Array ์์ฑ์(๊ฑฐ์ ์ฌ์ฉํ์ง ์๋๋ค)
const arr5 = new Array(); // ๋น ๋ฐฐ์ด
const arr6 = new Array(1, 2, 3); // [1, 2, 3]
const arr7 = new Array(2); // ๊ธธ์ด๊ฐ 2์ธ ๋ฐฐ์ด. ์์๋ ๋ชจ๋ undefined ์ด๋ค.
const arr8 = new Array('2'); // ['2']
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# ๋ฐฐ์ด ์์ ์กฐ์
๋ฉ์๋๋ฅผ ์ค๋ช ํ๊ธฐ์ ์์, ์์ฃผ ์ฌ์ฉํ๋ ๋ฐฐ์ด ์กฐ์ ๋ฉ์๋์ ๋ํด ์ง๊ณ ๋์ด๊ฐ ์ ์ด ์๋ค. ์ ์ํ๊ฒ๋ ๋ฐฐ์ด ๋ฉ์๋ ์ค ์ผ๋ถ๋ ๋ฐฐ์ด '์์ฒด๋ฅผ' ์์ ํ๋ฉฐ, ๋ค๋ฅธ ์ผ๋ถ๋ ์ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
์๋ฅผ ๋ค์ด push
๋ ๋ฐฐ์ด ์์ฒด๋ฅผ ์์ ํ๋ฉฐ, concat
์ ์ ๋ฐฐ์ด์ ๋ฐํํ๋ค. ๋ฉ์๋ ์ด๋ฆ์ ์ด๋ฐ ์ฐจ์ด์ ์ ๋ํ ํํธ๊ฐ ์ ํ ์์ผ๋ฏ๋ก ํ๋ก๊ทธ๋๋จธ๊ฐ ์ ๋ถ ๊ธฐ์ตํด์ผ ํ๋ค.
# ๋ฐฐ์ด์ ์ฒ์์ด๋ ๋์์ ์์ ํ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๊ธฐ
๋ฐฐ์ด์ ์ฒ์์ ์ฒซ ๋ฒ์งธ ์์, ์ฆ ์ธ๋ฑ์ค๊ฐ 0์ธ ์์๋ฅผ ๋งํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐฐ์ด์ ๋์ ์ธ๋ฑ์ค๊ฐ ๊ฐ์ฅ ํฐ ์์, ์ฆ ๋ฐฐ์ด์ด arr
์ด๋ผ๋ฉด arr.length - 1
์ธ ์์๋ฅผ ๋งํ๋ค.
push
์ pop
์ ๊ฐ๊ฐ ๋ฐฐ์ด์ ๋์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ค(์์ ). shift
์ unshift
๋ ๊ฐ๊ฐ ๋ฐฐ์ด์ ์ฒ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ์ถ๊ฐํ๋ค(์์ ).
TIP
์ด๋ค ๋ฉ์๋์ ์ด๋ฆ์ ์ปดํจํฐ ๊ณผํ ์ฉ์ด์์ ๋์๋ค.
push์ pop์ ๋ฐ์ดํฐ๋ฅผ ์์ง์ผ๋ก ์์ ์ฌ๋ฆฌ๋ ์คํ(stack)์ ํด๋นํ๋ ํ๋์ด๋ค.
shift์ unshift๋ ๋๊ธฐ์ด๊ณผ ๋น์ทํ ํ(queue)์ ํด๋นํ๋ ํ๋์ด๋ค.
push
์ unshift
๋ ์ ์์๋ฅผ ์ถ๊ฐํด์ ๋์ด๋ ๊ธธ์ด๋ฅผ ๋ฐํํ๊ณ , pop
๊ณผ shift
๋ ์ ๊ฑฐ๋ ์์๋ฅผ ๋ฐํํ๋ค.
์์ ๋ฅผ ๋ณด์.
const arr = ['b', 'c', 'd'];
arr.push('e');
// 4. arr์ ์ด์ ['b', 'c', 'd', 'e'] ์ด๋ค.
arr.pop();
// 'e'. arr์ ์ด์ ['b', 'c', 'd'] ์ด๋ค.
arr.unshift('a');
// 4. arr์ ์ด์ ['a', 'b', 'c', 'd'] ์ด๋ค.
arr.shift();
// 'e'. arr์ ์ด์ ['b', 'c', 'd'] ์ด๋ค.
2
3
4
5
6
7
8
9
10
11
12
# ๋ฐฐ์ด์ ๋์ ์ฌ๋ฌ ์์ ์ถ๊ฐํ๊ธฐ
concat
๋ฉ์๋๋ ๋ฐฐ์ด์ ๋์ ์ฌ๋ฌ ์์๋ฅผ ์ถ๊ฐํ ์ฌ๋ณธ์ ๋ฐํํ๋ค.
concat
์ ๋ฐฐ์ด์ ๋๊ธฐ๋ฉด ์ด ๋ฉ์๋๋ ๋ฐฐ์ด์ ๋ถํดํด์ ์๋ ๋ฐฐ์ด์ ์ถ๊ฐํ ์ฌ๋ณธ์ ๋ฐํํ๋ค.
์์ ๋ฅผ ๋ณด์.
const arr = [1, 2, 3];
arr.concat(4, 5, 6);
// [1, 2, 3, 4, 5, 6]. arr์ ๋ฐ๋์ง ์๋๋ค.
arr.concat([4, 5, 6]);
// [1, 2, 3, 4, 5, 6]. arr์ ๋ฐ๋์ง ์๋๋ค.
arr.concat([4, 5], 6);
// [1, 2, 3, 4, 5, 6]. arr์ ๋ฐ๋์ง ์๋๋ค.
arr.concat([4, [5, 6]]);
// [1, 2, 3, 4, [5, 6]]. arr์ ๋ฐ๋์ง ์๋๋ค.
2
3
4
5
6
7
8
9
10
11
12
concat
์ ์ ๊ณต๋ฐ์ ๋ฐฐ์ด์ ํ ๋ฒ๋ง ๋ถํดํ๋ค. ๋ฐฐ์ด ์์ ์๋ ๋ฐฐ์ด์ ๋ค์ ๋ถํดํ์ง๋ ์๋๋ค.
# ๋ฐฐ์ด ์ผ๋ถ ๊ฐ์ ธ์ค๊ธฐ
๋ฐฐ์ด์ ์ผ๋ถ๋ง ๊ฐ์ ธ์ฌ ๋๋ slice
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
slice
๋ฉ์๋๋ ๋งค๊ฐ๋ณ์ ๋ ๊ฐ๋ฅผ ๋ฐ๋๋ค. ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ์ด๋์๋ถํฐ ๊ฐ์ ธ์ฌ์ง๋ฅผ, ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ์ด๋๊น์ง ๊ฐ์ ธ์ฌ์ง๋ฅผ(๋ฐ๋ก ์ ์ธ๋ฑ์ค๊น์ง ๊ฐ์ ธ์จ๋ค) ์ง์ ํ๋ค. ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ฅผ ์๋ตํ๋ฉด ๋ฐฐ์ด์ ๋ง์ง๋ง๊น์ง ๋ฐํํ๋ค.
์ด ๋ฉ์๋์์๋ ์์ ์ธ๋ฑ์ค๋ฅผ ์ธ ์ ์๊ณ , ์์ ์ธ๋ฑ์ค๋ฅผ ์ฐ๋ฉด ๋ฐฐ์ด์ ๋์์๋ถํฐ ์์๋ฅผ ์ผ๋ค.
์์ ๋ฅผ ๋ณด์.
const arr = [1, 2, 3, 4, 5];
arr.slice(3);
// [4, 5]. arr์ ๋ฐ๋์ง ์๋๋ค.
arr.slice(2, 4);
// [3, 4]. arr์ ๋ฐ๋์ง ์๋๋ค.
arr.slice(-2);
// [4, 5]. arr์ ๋ฐ๋์ง ์๋๋ค.
arr.slice(1, -2);
// [2, 3]. arr์ ๋ฐ๋์ง ์๋๋ค.
arr.slice(-2, -1);
// [4]. arr์ ๋ฐ๋์ง ์๋๋ค.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# ์์์ ์์น์ ์์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๊ธฐ
splice
๋ ๋ฐฐ์ด์ ์์ ๋กญ๊ฒ ์์ ํ ์ ์๋ค.
์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ์์ ์ ์์ํ ์ธ๋ฑ์ค์ด๊ณ , ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ์ ๊ฑฐํ ์์ ์ซ์์ด๋ค. ์๋ฌด ์์๋ ์ ๊ฑฐํ์ง ์์ ๋๋ 0์ ๋๊ธด๋ค. ๋๋จธ์ง ๋งค๊ฐ๋ณ์๋ ๋ฐฐ์ด์ ์ถ๊ฐ๋ ์์์ด๋ค.
์์ ๋ฅผ ๋ณด์.
const arr = [1, 5, 7];
arr.splice(1, 0, 2, 3, 4);
// []. arr์ ์ด์ [1, 2, 3, 4, 5, 7] ์ด๋ค.
arr.splice(5, 0, 6);
// []. arr์ ์ด์ [1, 2, 3, 4, 5, 6, 7] ์ด๋ค.
arr.splice(1, 2);
// [2, 3]. arr์ ์ด์ [1, 4, 5, 6, 7] ์ด๋ค.
arr.splice(2, 1, 'a', 'b');
// [5]. arr์ ์ด์ [1, 4, 'a', 'b', 6, 7] ์ด๋ค.
2
3
4
5
6
7
8
9
10
11
12
# ๋ฐฐ์ด ์์์ ์์ ๊ต์ฒดํ๊ธฐ
copyWithin
์ ES6
์์ ๋์
ํ ์ ๋ฉ์๋์ด๋ค. ์ด ๋ฉ์๋๋ ๋ฐฐ์ด ์์๋ฅผ ๋ณต์ฌํด์ ๋ค๋ฅธ ์์น์ ๋ถ์ฌ๋ฃ๊ณ , ๊ธฐ์กด์ ์์๋ฅผ ๋ฎ์ด์ด๋ค.
์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋ณต์ฌํ ์์๋ฅผ ๋ถ์ฌ๋ฃ์ ์์น์ด๊ณ , ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋ณต์ฌ๋ฅผ ์์ํ ์์น์ด๊ณ , ์ธ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋ณต์ฌ๋ฅผ ๋๋ผ ์์น์ด๋ค(์๋ต ๊ฐ๋ฅ).
slice
์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด์ ๋์์๋ถํฐ ์ผ๋ค.
์์ ๋ฅผ ๋ณด์.
const arr = [1, 2, 3, 4];
arr.copyWithin(1, 2);
// arr์ ์ด์ [1, 3, 4, 4] ์ด๋ค.
arr.copyWithin(2, 0, 2);
// arr์ ์ด์ [1, 3, 1, 3] ์ด๋ค.
arr.copyWithin(0, -3, -1);
// arr์ ์ด์ [3, 1, 1, 3] ์ด๋ค.
2
3
4
5
6
7
8
9
10
# ํน์ ๊ฐ์ผ๋ก ๋ฐฐ์ด ์ฑ์ฐ๊ธฐ
ES6์์ ๋์
ํ ์ ๋ฉ์๋ fill
์ ํ์ํ ๋งํ ์ข์ ๋ฉ์๋์ด๋ค. ์ด ๋ฉ์๋๋ ์ ํด์ง ๊ฐ์ผ๋ก ๋ฐฐ์ด์ ์ฑ์ด๋ค.
ํฌ๊ธฐ๋ฅผ ์ง์ ํด์ ๋ฐฐ์ด์ ์์ฑํ๋ Array ์์ฑ์์ ์ ์ด์ธ๋ฆฐ๋ค. ๋ฐฐ์ด์ ์ผ๋ถ๋ง ์ฑ์ฐ๋ ค ํ ๋๋ ์์ ์ธ๋ฑ์ค์ ๋ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ฉด ๋๋ค. ์์ ์ธ๋ฑ์ค๋ ์ฌ์ฉํ ์ ์๋ค.
์์ ๋ฅผ ๋ณด์.
const arr = new Array(5).fill(1); // arr์ด [1, 1, 1, 1, 1]๋ก ์ด๊ธฐํ๋๋ค.
arr.fill('a');
// arr์ ์ด์ ['a', 'a', 'a', 'a', 'a'] ์ด๋ค.
arr.fill('b', 1);
// arr์ ์ด์ ['a', 'b', 'b', 'b', 'b'] ์ด๋ค.
arr.fill('c', 2, 4);
// arr์ ์ด์ ['a', 'b', 'c', 'c', 'b'] ์ด๋ค.
arr.fill(5.5, -4);
// arr์ ์ด์ ['a', 5.5, 5.5, 5.5, 5.5] ์ด๋ค.
arr.fill(0, -3, -1);
// arr์ ์ด์ ['a', 5.5, 0, 0, 5.5] ์ด๋ค.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# ๋ฐฐ์ด ์ ๋ ฌ๊ณผ ์ญ์ ์ ๋ ฌ
reverse
๋ ์ด๋ฆ ๊ทธ๋๋ก ๋ฐฐ์ด ์์์ ์์๋ฅผ ๋ฐ๋๋ก ๋ฐ๊พผ๋ค(์์ ).
const arr = [1, 2, 3, 4, 5];
arr.reverse();
// arr์ ์ด์ [5, 4, 3, 2, 1] ์ด๋ค.
2
3
sort
๋ ๋ฐฐ์ด ์์์ ์์๋ฅผ ์ ๋ ฌํ๋ค.
const arr = [5, 3, 2, 4, 1];
arr.sort();
// arr์ ์ด์ [1, 2, 3, 4, 5] ์ด๋ค.
2
3
sort
๋ ์ ๋ ฌ ํจ์๋ฅผ ๋ฐ์ ์ ์๋ค. ์ด ๊ธฐ๋ฅ์ ๋งค์ฐ ํธ๋ฆฌํ๋ค. ์๋ฅผ ๋ค์ด ์ผ๋ฐ์ ์ผ๋ก๋ ๊ฐ์ฒด๊ฐ ๋ค์ด์๋ ๋ฐฐ์ด์ ์ ๋ ฌํ ์ ์์ง๋ง, ์ ๋ ฌ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฅํ๋ค.
const arr = [
{
name: 'Susan',
},
{
name: 'Jim',
},
{
name: 'Trevor',
},
{
name: 'Amanda',
}
];
arr.sort();
// arr์ ๋ฐ๋์ง ์๋๋ค.
arr.sort((a, b) => a.name > b.name);
// arr์ name ํ๋กํผํฐ์ ์ํ๋ฒณ ์์ผ๋ก ์ ๋ ฌ๋๋ค.
arr.sort((a, b) => a.name[1] < b.name[1])
// arr์ name ํ๋กํผํฐ์ ๋ ๋ฒ์งธ ๊ธ์์ ์ํ๋ฒณ ์ญ์์ผ๋ก ์ ๋ ฌ๋๋ค.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
TIP
์ด ์์ ์ ์ ๋ ฌ ํจ์์์๋ ๋ถ๋ฆฌ์ธ์ ๋ฐํํ์ง๋ง, ์ซ์๋ฅผ ๋ฐํํ๋ ํจ์๋ ์ธ ์ ์๋ค. 0
์ด ๋ฐํ๋๋ฉด sort
๋ ์์๊ฐ ์์์ ๊ฐ๋ค๊ณ ๊ฐ์ฃผํ๊ณ ์์๋ฅผ ๋ฐ๊พธ์ง ์๋๋ค.
์ด๋ฅผ ์์ฉํ๋ฉด ์ํ๋ฒณ ์์ผ๋ก ์ ๋ ฌํ๋ฉด์ k๋ก ์์ํ๋ ๋จ์ด๋ง ์๋ ์์๋ฅผ ์ ์งํ๋ค๋ ์์ ์์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ฆ, k๋ก ์์ํ๋ ๋จ์ด๋ j๋ก ์์ํ๋ ์ด๋ค ๋จ์ด๋ณด๋ค ๋ค์ ์๊ณ l๋ก ์์ํ๋ ์ด๋ค ๋จ์ด๋ณด๋ค ์์ ์์ง๋ง, k๋ก ์์ํ๋ ๋จ์ด๋ค์ ์์๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ ๊ฒ์ด๋ค.
# ๋ฐฐ์ด ๊ฒ์
๋ฐฐ์ด ์์์ ๋ญ๊ฐ ์ฐพ์ผ๋ ค ํ ๋๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
indexOf
๋ ์ฐพ๊ณ ์ ํ๋ ๊ฒ๊ณผ ์ ํํ ์ผ์น(===)ํ๋ ์ฒซ ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค. indexOf
์ ์ง์ธ lastIndexOf
๋ ๋ฐฐ์ด์ ๋์์๋ถํฐ ๊ฒ์ํ๋ค. ๋ฐฐ์ด์ ์ผ๋ถ๋ถ๋ง ๊ฒ์ํ๋ ค๋ฉด ์์ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ ์ ์๋ค.
indexOf
์ lastIndexOf
๋ ์ผ์นํ๋ ๊ฒ์ ์ฐพ์ง ๋ชปํ๋ฉด -1์ ๋ฐํํ๋ค.
const o = {
name: 'Jerry',
};
const arr = [1, 5, 'a', o, true, 5, [1, 2], '9'];
arr.indexOf(5); // 1
arr.lastIndexOf(5); // 5
arr.indexOf('a'); // 2
arr.lastIndexOf('a'); // 2
arr.indexOf({ name: 'Jerry'}); // -1
arr.indexOf(o); // 3
arr.indexOf([1, 2]); // -1
arr.indexOf('9'); // 7
arr.indexOf(9); // -1
arr.indexOf('a', 5); // -1
arr.indexOf(5, 5); // 5
arr.lastIndexOf(5, 4); // 1
arr.lastIndexOf(true, 3); // -1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
findIndex
๋ ์ผ์นํ๋ ๊ฒ์ ์ฐพ์ง ๋ชปํ์ ๋ -1์ ๋ฐํํ๋ค๋ ์ ์์๋ indexOf
์ ๋น์ทํ์ง๋ง, ๋ณด์กฐ ํจ์๋ฅผ ์จ์ ๊ฒ์ ์กฐ๊ฑด์ ์ง์ ํ ์ ์์ผ๋ฏ๋ก indexOf
๋ณด๋ค ๋ ๋ค์ํ ์ํฉ์์ ํ์ฉํ ์ ์๋ค.
ํ์ง๋ง findIndex
๋ ๊ฒ์์ ์์ํ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ ์ ์๊ณ , ๋ค์์๋ถํฐ ์ฐพ๋ findLastIndex
๊ฐ์ ์ง๋ ์๋ค.
const arr = [
{
id: 5,
name: 'Judith',
},
{
id: 7,
name: 'Francis',
},
];
arr.findIndex(o => o.id === 5);
// 0
arr.findIndex(o => o.name === 'Francis');
// 1
arr.findIndex(o => o === 3);
// -1
arr.findIndex(o => o.id === 17);
// -1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
indexOf
์ findIndex
๋ ์กฐ๊ฑด์ ๋ง๋ ์์์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ ๋ ์๋ง์ง๋ง, ์กฐ๊ฑด์ ๋ง๋ ์์์ ์ธ๋ฑ์ค๊ฐ ์๋๋ผ ์์ ์์ฒด๋ฅผ ์ํ ๋๋ find
๋ฅผ ์ฌ์ฉํ๋ค.
find
๋ findIndex
์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฒ์ ์กฐ๊ฑด์ ํจ์๋ก ์ ๋ฌํ ์ ์๋ค. ์กฐ๊ฑด์ ๋ง๋ ์์๊ฐ ์์ ๋๋ undefined
๋ฅผ ๋ฐํํ๋ค.
const arr = [
{
id: 5,
name: 'Judith',
},
{
id: 7,
name: 'Francis',
},
];
arr.find(o => o.id === 5);
// ๊ฐ์ฒด { id: 5, name: 'Judith' }
arr.find(o => o.id === 2);
// undefined
2
3
4
5
6
7
8
9
10
11
12
13
14
15
find
์ findIndex
์ ์ ๋ฌํ๋ ํจ์๋ ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ณ , ํ์ฌ ์์์ ์ธ๋ฑ์ค์ ๋ฐฐ์ด ์์ฒด๋ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค.
์ด๋ฐ ์ ์ ๋ค์ํ๊ฒ ์์ฉํ ์ ์๋ค. ์๋ฅผ๋ค์ด, ํน์ ์ธ๋ฑ์ค๋ณด๋ค ๋ค์ ์๋ ์ ๊ณฑ์๋ฅผ ์ฐพ์์ผ ํ๋ค๊ณ ํ์.
const arr = [1, 17, 16, 5, 4, 16, 10, 3, 49];
arr.find((x, i) => i > 2 && Number.isInteger(Math.sqrt(x)));
// 4
2
3
find
์ findIndex
์ ์ ๋ฌํ๋ ํจ์์ this
๋ ์์ ํ ์ ์๋ค. ์ด๋ฅผ ์ด์ฉํด์ ํจ์๊ฐ ๊ฐ์ฒด์ ๋ฉ์๋์ธ ๊ฒ์ฒ๋ผ ํธ์ถํ ์ ์๋ค.
ID๋ฅผ ์กฐ๊ฑด์ผ๋ก Person ๊ฐ์ฒด๋ฅผ ๊ฒ์ํ๋ ์์ ๋ฅผ ๋ณด์. ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ๊ณผ๋ ๊ฐ๋ค.
class Person {
constructor(name) {
this.name = name;
this.id = Person.nextId++;
}
}
Person.nextId = 0;
const jamie = new Person('jamie'),
juliet = new Person('juliet'),
peter = new Person('peter'),
jay = new Person('Jay');
const arr = [jamie, juliet, peter, jay];
// ์ต์
1: ID๋ฅผ ์ง์ ๋น๊ตํ๋ ๋ฐฉ๋ฒ
arr.find(p => p.id === juliet.id); // juliet ๊ฐ์ฒด
// ์ต์
2: 'this' ๋งค๊ฐ๋ณ์๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
arr.find(function (p) {
return p.id === this.id;
}, juliet); // juliet ๊ฐ์ฒด
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
์ด๋ ๊ฒ ๊ฐ๋จํ ์์ ์์๋ find
์ findIndex
์์ this
๊ฐ์ ๋ฐ๊พธ๋ ์๋ฏธ๊ฐ ๋ณ๋ก ์์ง๋ง, ๋์ค์ ์ด ๋ฐฉ๋ฒ์ด ๋ ์ ์ฉํ๊ฒ ์ฐ์ด๋ ๊ฒฝ์ฐ๋ฅผ ๋ณด๊ฒ ๋ ๊ฒ์ด๋ค.
๊ฐํน ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์์ ์ธ๋ฑ์ค๋, ์์ ์์ฒด๋ ํ์ ์๊ณ , ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๊ฐ ์๋์ง ์๋์ง๋ง ์๋ฉด ์ถฉ๋ถํ ๋๊ฐ ์๋ค. ๋ฌผ๋ก ์์์ ์ค๋ช
ํ ํจ์๋ฅผ ์ฌ์ฉํ๊ณ -1์ด๋ null
์ด ๋ฐํ๋๋์ง ํ์ธํด๋ ๋์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ์๋ ์ด๋ด ๋ ์ฐ๋ผ๊ณ ๋ง๋ some
๊ณผ every
๋ฉ์๋๊ฐ ์๋ค.
some
์ ์กฐ๊ฑด์ ๋ง๋ ์์๋ฅผ ์ฐพ์ผ๋ฉด ์ฆ์ ๊ฒ์์ ๋ฉ์ถ๊ณ true
๋ฅผ ๋ฐํํ๋ฉฐ, ์กฐ๊ฑด์ ๋ง๋ ์์๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด false
๋ฅผ ๋ฐํํ๋ค.
์์ ๋ฅผ ๋ณด์.
const arr = [5, 7, 12, 15, 17];
arr.some(x => x%2 === 0);
// true; 12๋ ์ง์์ด๋ค.
arr.some(x => Number.isInteger(Math.sqrt(x)));
// false; ์ ๊ณฑ์๊ฐ ์๋ค.
2
3
4
5
6
every
๋ ๋ฐฐ์ด์ ๋ชจ๋ ์์๊ฐ ์กฐ๊ฑด์ ๋ง์์ผ true
๋ฅผ ๋ฐํํ๋ฉฐ ๊ทธ๋ ์ง ์๋ค๋ฉด false
๋ฅผ ๋ฐํํ๋ค.
every
๋ ์กฐ๊ฑด์ ๋ง์ง ์๋ ์์๋ฅผ ์ฐพ์์ผ๋ง ๊ฒ์์ ๋ฉ์ถ๊ณ false
๋ฅผ ๋ฐํํ๋ค. ์กฐ๊ฑด์ ๋ง์ง ์๋ ์์๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ๋ฐฐ์ด ์ ์ฒด๋ฅผ ๊ฒ์ํ๋ค.
const arr = [4, 6, 16, 36];
arr.every(x => x%2 === 0);
// true; ํ์๊ฐ ์๋ค.
arr.every(x => Number.isInteger(Math.sqrt(x)));
// false; 6์ ์ ๊ณฑ์๊ฐ ์๋๋ค.
2
3
4
5
6
some
๊ณผ every
๋ ์ฝ๋ฐฑํจ์๋ฅผ ํธ์ถํ ๋ this
๋ก ์ฌ์ฉํ ๊ฐ์ ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ ์๋ค.