일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- C
- algorithmtraining
- algorithmStudy
- 채권
- 성분
- Java
- 다독
- 서평
- 독서
- 투자
- 지혜를가진흑곰
- 프로그래머스 알고리즘 공부
- 주식
- 자바스크립트
- 백준알고리즘
- 책을알려주는남자
- 알고리즘 공부
- 알고리즘공부
- 알고리즘트레이닝
- 책알남
- C++
- 자바
- JavaScript
- 화장품
- 돈
- 경제
- 독후감
- 프로그래밍언어
- algorithmTest
- 재테크
Archives
- Today
- Total
탁월함은 어떻게 나오는가?
[JavaScript] 배열을 조작하는 push()메서드 종류 대신 사용할 수 있는 펼침 연산자 사용 방법 및 사용해야 하는 이유 본문
[Snow-ball]프로그래밍(컴퓨터)/자바스크립트(JavaScript)
[JavaScript] 배열을 조작하는 push()메서드 종류 대신 사용할 수 있는 펼침 연산자 사용 방법 및 사용해야 하는 이유
Snow-ball 2021. 9. 29. 10:52반응형
자바스크립트를 사용하면서 배열을 사용할 경우가 많다.
특히나, 배열을 조작하기 위해 흔히 사용하는 push()메서드를 생각해보자. push() 메서드의 경우는 새로운 항목을 기존 배열 뒤에 추가해 원본배열을 변경하게 된다. 즉, 원본 배열을 조작하게 되는 것이다. 하지만 펼침연산자(...)을 이용하면 원본 배열이 조작되는 부수 효과를 방지할 수 있다.
모던 자바스크립트에서는 상당수가 함수형 프로그래밍 형식을 취하기 때문에 부수효과와 조작이 없는 코드를 지향해야 한다.
push() 사용 예)
- 원본배열이 수정되는것을 볼 수 있다.
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
const cart = [
{
name: "The Foundation Trioloigy",
price: 19.99,
discount: false,
},
{
name: "Godel, Escher, Bach",
price: 15.99,
discount: false,
},
{
name: "Red Mars",
price: 5.99,
discount: true,
},
];
const reward = {
name: "Guide to Science Fiction",
discount: true,
price: 0,
};
function addFreeGift(cart) {
if (cart.length > 2) {
cart.push(reward);
return cart;
}
return cart;
}
function sumarizeCart(cart) {
const discountable = cart.filter((item) => item.discount);
if (discountable.length > 1) {
return {
error: "할인 상품은 하나만 주문할 수 있습니다.",
};
}
const cartWithReward = addFreeGift(cart);
return {
discounts: discountable.length,
items: cartWithReward.length,
cart: cartWithReward,
};
}
console.log("cart : ", cart);
// cart : [
// { name: 'The Foundation Trioloigy', price: 19.99, discount: false },
// { name: 'Godel, Escher, Bach', price: 15.99, discount: false },
// { name: 'Red Mars', price: 5.99, discount: true }
// ]
console.log("cart.length : ", cart.length); // 3
console.log("sumarizeCart() : ", sumarizeCart(cart));
// sumarizeCart() : {
// discounts: 1,
// items: 4,
// cart: [
// { name: 'The Foundation Trioloigy', price: 19.99, discount: false },
// { name: 'Godel, Escher, Bach', price: 15.99, discount: false },
// { name: 'Red Mars', price: 5.99, discount: true },
// { name: 'Guide to Science Fiction', discount: true, price: 0 }
// ]
// }
console.log("cart : ", cart); // 원본 배열이 수정됨.
// cart: [
// { name: "The Foundation Trioloigy", price: 19.99, discount: false },
// { name: "Godel, Escher, Bach", price: 15.99, discount: false },
// { name: "Red Mars", price: 5.99, discount: true },
// { name: "Guide to Science Fiction", discount: true, price: 0 },
// ];
|
cs |
push() 사용 예2 )
const cartWithReward = addFreeGift(cart); 을 33번 라인으로 올리니 에러가 발생하게 된다.
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
53
54
55
56
57
58
|
const cart = [
{
name: "The Foundation Trioloigy",
price: 19.99,
discount: false,
},
{
name: "Godel, Escher, Bach",
price: 15.99,
discount: false,
},
{
name: "Red Mars",
price: 5.99,
discount: true,
},
];
const reward = {
name: "Guide to Science Fiction",
discount: true,
price: 0,
};
function addFreeGift(cart) {
if (cart.length > 2) {
cart.push(reward);
return cart;
}
return cart;
}
function sumarizeCart(cart) {
const cartWithReward = addFreeGift(cart);
const discountable = cart.filter((item) => item.discount);
if (discountable.length > 1) {
return {
error: "할인 상품은 하나만 주문할 수 있습니다.",
};
}
return {
discounts: discountable.length,
items: cartWithReward.length,
cart: cartWithReward,
};
}
console.log("cart : ", cart);
// cart: [
// { name: "The Foundation Trioloigy", price: 19.99, discount: false },
// { name: "Godel, Escher, Bach", price: 15.99, discount: false },
// { name: "Red Mars", price: 5.99, discount: true },
// ];
console.log("cart.length : ", cart.length); // 3
console.log("sumarizeCart() : ", sumarizeCart(cart)); // { error: '할인 상품은 하나만 주문할 수 있습니다.' }
|
cs |
펼침연산자 사용 예)
펼침연산자를 사용하니 원본 배열은 수정되지 않고 제대로 작동하는 것을 확인할 수 있다.
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
53
54
55
56
57
58
59
60
61
62
|
const cart = [
{
name: "The Foundation Trioloigy",
price: 19.99,
discount: false,
},
{
name: "Godel, Escher, Bach",
price: 15.99,
discount: false,
},
{
name: "Red Mars",
price: 5.99,
discount: true,
},
];
const reward = {
name: "Guide to Science Fiction",
discount: true,
price: 0,
};
function addGift(cart) {
if (cart.length > 2) {
return [...cart, reward];
}
return cart;
}
function sumarizeCart(cart) {
const cartWithReward = addGift(cart);
const discountable = cart.filter((item) => item.discount);
if (discountable.length > 1) {
return {
error: "할인 상품은 하나만 주문할 수 있습니다.",
};
}
return {
discounts: discountable.length,
items: cartWithReward.length,
cart: cartWithReward,
};
}
console.log("addGift() : ", addGift(cart));
// addGift() : [
// { name: 'The Foundation Trioloigy', price: 19.99, discount: false },
// { name: 'Godel, Escher, Bach', price: 15.99, discount: false },
// { name: 'Red Mars', price: 5.99, discount: true },
// { name: 'Guide to Science Fiction', discount: true, price: 0 }
// ]
console.log("cart : ", cart); // 원본 배열이 수정되지 않음.
// cart: [
// { name: "The Foundation Trioloigy", price: 19.99, discount: false },
// { name: "Godel, Escher, Bach", price: 15.99, discount: false },
// { name: "Red Mars", price: 5.99, discount: true },
// ];
|
cs |
펼침연산자 사용 예2)
1
2
3
4
5
6
7
|
const titles = ["Moby Dick", "White Teeth"];
const moreTitles = [...titles, "The Conscious Mind"];
console.log("moreTitles : ", moreTitles); // [ 'Moby Dick', 'White Teeth', 'The Conscious Mind' ]
console.log("titles : ", titles); // [ 'Moby Dick', 'White Teeth' ]
const moreTitles2 = ["The Conscious Mind", ...titles];
console.log("moreTitles2 : ", moreTitles2); // [ 'The Conscious Mind', 'Moby Dick', 'White Teeth' ]
|
cs |
펼침연산자 사용 예3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
// 배열 앞에 추가하기
const titles = ["Moby Dick", "White Teeth"];
console.log("titles : ", titles); // [ 'Moby Dick', 'White Teeth' ]
titles.shift("The Consciouys Mind");
console.log("밑 titles : ", titles); // [ 'White Teeth' ]
const moreTitles = ["Moby Dick", "White Teeth"];
console.log("moreTitles : ", moreTitles); // [ 'Moby Dick', 'White Teeth' ]
const evenMoreTitles = ["The Conscious Mind", ...moreTitles];
console.log("evenMoreTitles : ", evenMoreTitles); // [ 'The Conscious Mind', 'Moby Dick', 'White Teeth' ]
// 복사하기
const toCopy = ["Moby Dick", "White Teeth"];
console.log("toCopy : ", toCopy); // [ 'Moby Dick', 'White Teeth' ]
// slice() 얕은복사
const copied = toCopy.slice();
console.log("copied : ", copied); // [ 'Moby Dick', 'White Teeth' ]
const moreCopies = ["Moby Dick", "White Teeth"];
console.log("moreCopies : ", moreCopies); // [ 'Moby Dick', 'White Teeth' ]
// ... 얕은복사
const moreCopied = [...moreCopies];
console.log("moreCopied : ", moreCopied); // [ 'Moby Dick', 'White Teeth' ]
|
cs |
반응형
'[Snow-ball]프로그래밍(컴퓨터) > 자바스크립트(JavaScript)' 카테고리의 다른 글
[JavaScript] 매개변수 기본값(Default Parameters)을 정확하게 사용하는법과 생성하는법 (0) | 2021.10.16 |
---|---|
[JavaScript] 펼침 연산자(...)로 배열을 복사해야하는 이유 (0) | 2021.10.08 |
[JavaScript] Array() -push / pop / shift / unshift (0) | 2021.08.12 |
[JavaScript] Map(맵)이란? (0) | 2021.08.05 |
[JavaScript] 자바스크립트 함수 객체프로퍼티와 일급객체에 대해 알아보자 (0) | 2021.07.25 |
Comments