# * Learning JavaScript - ๋ฐฐ์—ด 1ํŽธ

Written by ๐Ÿ“ Tesilio

์ด ํฌ์ŠคํŒ…์€ 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']
1
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'] ์ด๋‹ค.
1
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์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.
1
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์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.
1
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] ์ด๋‹ค.
1
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] ์ด๋‹ค.

1
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] ์ด๋‹ค.
1
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] ์ด๋‹ค.
1
2
3

sort๋Š” ๋ฐฐ์—ด ์š”์†Œ์˜ ์ˆœ์„œ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.

const arr = [5, 3, 2, 4, 1];
arr.sort();
// arr์€ ์ด์ œ [1, 2, 3, 4, 5] ์ด๋‹ค.
1
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 ํ”„๋กœํผํ‹ฐ์˜ ๋‘ ๋ฒˆ์งธ ๊ธ€์ž์˜ ์•ŒํŒŒ๋ฒณ ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.
1
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
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
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
1
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
1
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 ๊ฐ์ฒด
1
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; ์ œ๊ณฑ์ˆ˜๊ฐ€ ์—†๋‹ค.
1
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์€ ์ œ๊ณฑ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
1
2
3
4
5
6

some๊ณผ every๋„ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ this๋กœ ์‚ฌ์šฉํ•  ๊ฐ’์„ ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

Last Updated: 8/8/2019, 1:40:16 PM