๐ [JS ๊ณต๋ถ๊ธฐ๋ก] ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ์ดํฐ์ ์์์ผํ ๊ฐ๋ ๋ค
์ซ์์ ์ํ
- toFixed() โ ์์์ ์๋ฆฌ์
- parseInt(str) โ ์ซ์๋ฅผ ์ ์๋ก ์ถ์ถ
- parseFloat(str) โ ์ซ์๋ฅผ ์ค์๋ก ์ถ์ถ
Math ๋ด์ฅ ๊ฐ์ฒด
- Math.abs() โ ์ฃผ์ด์ง ์ซ์์ ์ ๋๊ฐ์ ๋ฐํ
- Math.min(2, 8) โ ์ฃผ์ด์ง ์ซ์์ ์ต์๊ฐ ๋ฐํ
- Math.max(2, 8) โ ์ฃผ์ด์ง ์ซ์์ ์ต๋๊ฐ ๋ฐํ
- Math.ceil(3.14) โ ์ฃผ์ด์ง ์ซ์๋ฅผ ์ฌ๋ฆผ์ฒ๋ฆฌ
- Math.floor(3.14) โ ์ฃผ์ด์ง ์ซ์๋ฅผ ๋ด๋ฆผ์ฒ๋ฆฌ
- Math.round(3.14) โ ์ฃผ์ด์ง ์ซ์๋ฅผ ๋ฐ์ฌ๋ฆผ์ฒ๋ฆฌ
- Math.random() โ ๋๋คํ ์ซ์ ๋ฐํ
๋ฐฐ์ด API
Array.prototype
- .find()
const array1 = [5, 12, 8, 130, 44] const found = array1.find(el => el > 10) console.log(found)
- .length - ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ์๋ ค์ฃผ๋ ์์ฑ
- .concat() - ๋๊ฐ์ ๋ฐฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณํฉํ์ฌ ๋ฐํ(์๋ณธ ๋ฐ์ดํฐ ์์X)
- .forEach() - ๋ฐฐ์ด์ ์์ ๊ฐ์๋งํผ ์ฝ๋ฐฑ ํจ์ ์คํ
let fruits = ['Apple', 'Banana', 'Pineapple'] fruits.forEach(elements, index, array) { console.log(elements, index, array) }
- .map() - ๋ฐฐ์ด ๋ด์ ๋ชจ๋ ์์ ๊ฐ๊ฐ์ ๋ํ์ฌ ์ฃผ์ด์ง ํจ์๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์ ์๋ก์ด ๋ฐฐ์ด ๋ฐํ(๋ณธ๋์ ๋ฐฐ์ด๊ณผ ๊ธธ์ด๊ฐ ๊ฐ์!)
const b = fruits.map((fruit, i) => ({ id: i, name: fruit }))
- .filter() - ์ฃผ์ด์ง ํจ์์ ํ
์คํธ๋ฅผ ํต๊ณผํ๋ ๋ชจ๋ ์์๋ฅผ ๋ชจ์ ์๋ก์ด ๋ฐฐ์ด๋ก ๋ฐํ
const numbers = [1, 2, 3, 4] const fruits = ['Apple', 'Banana', 'Cherry'] const a = fruits.filter(number => number > 3)
- (๊ฐ์ ๋ก์ง์ map ์ ์ฉ์ boolean ๋ฐ์ดํฐ๋ก ๋์ด!)
- .find() - ์ฃผ์ด์ง ํ๋ณ ํจ์๋ฅผ ๋ง์กฑํ๋ ์ฒซ ๋ฒ์งธ ์์์ ๊ฐ์ ๋ฐํ, ๊ทธ๋ฐ ์์๊ฐ ์๋ค๋ฉด undefined ๋ฐํ
const numbers = [1, 2, 3, 4] const fruits = ['Apple', 'Banana', 'Cherry'] const a = fruits.find(fruit => /^B/.test(fruit))
- .indeIndex() - ์ฃผ์ด์ง ํ๋ณ ํจ์๋ฅผ ๋ง์กฑํ๋ ์ฒซ ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค ๋ฐํ, ์๋ค๋ฉด -1 ๋ฐํ
const numbers = [1, 2, 3, 4] const fruits = ['Apple', 'Banana', 'Cherry'] const a = fruits.findIndex((fruit => return /^B/.test(fruit))
- .includes() - ๋ฐฐ์ด์ด ํน์ ์์๋ฅผ ํฌํจํ๊ณ ์๋์ง ํ๋ณ
const numbers = [1, 2, 3, 4] const fruits = ['Apple', 'Banana', 'Cherry'] const a = numbers.includes(3) console.log(a) // true
์๋ณธ ์์ ๋จ!
- .push() - ๋ฐฐ์ด์ ๋์ ํ๋ ์ด์์ ์์๋ฅผ ์ถ๊ฐํ๊ณ , ๋ฐฐ์ด์ ์๋ก์ด ๊ธธ์ด๋ฅผ ๋ฐํ
const animals = ['pigs', 'goats', 'sheep'] const count = animals.push('cows') console.log(count) // 4 console.log(animals) // Array ['pigs', 'goats', 'sheep', 'cows']
- .unshift() - ์๋ก์ด ์์๋ฅผ ๋ฐฐ์ด์ ๋งจ ์์ชฝ์ ์ถ๊ฐํ๊ณ , ์๋ก์ด ๊ธธ์ด๋ฅผ ๋ฐํ
const arr1 = [1, 2, 3] console.log(arr1.unshift(4, 5)) // 5 console.log(arr1) // Array [4, 5, 1, 2, 3]
- .reverse() - ๋ฐฐ์ด์ ์์๋ฅผ ๋ฐ์
const numbers = [1, 2, 3, 4] const fruits = ['Apple', 'Banana', 'Cherry'] numbers.reverse() fruits.reverse()
- .splice() - ๋ฐฐ์ด์ ๊ธฐ์กด ์์๋ฅผ ์ญ์ ๋๋ ๊ต์ฒดํ๊ฑฐ๋ ์ ์์๋ฅผ ์ถ๊ฐํ์ฌ ๋ฐฐ์ด์ ๋ด์ฉ์ผ๋ก ๋ณ๊ฒฝ
-
์ธ์๊ฐ 2๊ฐ โ .splice(2, 1) : ์ธ๋ฑ์ค ๋ฒํธ 2๋ฒ๋ถํฐ 1๊ฐ์ ๋ฐ์ดํฐ ์ง์
-
์ธ์๊ฐ 3๊ฐ โ .splice(2, 1, 99) : ์ธ๋ฑ์ค ๋ฒํธ 2๋ฒ๋ถํฐ 1๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ฐ๊ณ 99 ์ถ๊ฐ
const months = ['Jan', 'March', 'April', 'June']; months.splice(1, 0, 'Feb'); // inserts at index 1 console.log(months); // expected output: Array ["Jan", "Feb", "March", "April", "June"] months.splice(4, 1, 'May'); // replaces 1 element at index 4 console.log(months); // expected output: Array ["Jan", "Feb", "March", "April", "May"]
-
๊ฐ์ฒด(Object)
์ ์ ๋ฉ์๋ โ ๊ฐ์ฒด ํ๋กํ ํ์ ์ ์ด๋ฏธ ๋ฑ๋ก๋์ด ์๋ ํจ์๋ค
- ๋ฆฌํฐ๋ด ๋ฐฉ์์ผ๋ก ๋ฐ๋ก ์ฌ์ฉํ ์ ์์
- Object.assign(๋์๊ฐ์ฒด, ์ถ์ฒ๊ฐ์ฒด) - ์ด๊ฑฐํ ์ ์๋ ํ๋ ์ด์์ ์ถ์ฒ ๊ฐ์ฒด๋ก๋ถํฐ ๋์ ๊ฐ์ฒด๋ก ์์ฑ์ ๋ณต์ฌํ ๋ ์ฌ์ฉ / ์ถ์ฒ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋์๊ฐ์ฒด๋ก ๋ณต์ฌํด์ ๋ณํฉ
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }
const userAge = {
name: 'zerone',
age: 85
}
const userEmail = {
name: 'zerone'
email: '[email protected]'
}
const target = Object.assign({}, userAge, userEmail)
console.log(target === userAge) //flase
- Object.keys() - ์ฃผ์ด์ง ๋ฐฐ์ด์ ํค๋ฅผ ์ถ์ถํด์ ์๋ก์ด ๋ฐฐ์ด๋ก ๋ฐํ
๊ตฌ์กฐ ๋ถํด ํ ๋น (Destructuring assignment)
- ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์ฑ์ ํด์ฒดํ์ฌ ๊ทธ ๊ฐ์ ๊ฐ๋ณ ๋ณ์์ ๋ด์ ์ ์๊ฒ ํ๋ ํํ์
let a, b, rest;
[a, b] = [10, 20];
console.log(a);
// expected output: 10
console.log(b);
// expected output: 20
[a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(rest);
// expected output: Array [30,40,50]
const fruits = ['Apple', 'Banana', 'Cherry']
const [ , , c] = fruits
// output: Cherry
const user = {
name: 'zerone',
age: 98.
email: kc9994@naver.com
}
const {name, age: ๋์ด, address='korea', email} = user
// age๋ฅผ ๋์ด๋ผ๋ ๋ณ์๋ก ํ์ฉํ ์ ์์
์ ๊ฐ ์ฐ์ฐ์(Spread)
- ๋ฐฐ์ด์ด๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ด ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฌธ์๋ฅผ 0๊ฐ ์ด์์ ์ธ์ ๋๋ ์์๋ก ํ์ฅ
function sum(x, y, z) {
return x + y + z;
}
const numbers = [1, 2, 3];
console.log(sum(...numbers));
// expected output: 6
const fruits = ['Apple', 'Banana', 'Cherry', 'Orange']
function toObject(a, b, ...c) {
return {
a: a,
b: b,
c: c
}
}
console.log(toObject(...fruits)) // c ์๋ Cherry์ Orange๊ฐ ๋ชจ๋ ๋ด๊ฒจ์์
// ์ถ์ฝํ์ผ๋ก ์์ฑ๊ฐ๋ฅ
const toObject = (a, b, ...c) => ({a, b, c})
๋ฐ์ดํฐ ๋ถ๋ณ์ฑ(Immutability)
- ์์ ๋ฐ์ดํฐ: String, Number, Boolean, undefined, null ...
- ์ฐธ์กฐํ ๋ฐ์ดํฐ: Array, Object, Function ...
์์ํ ๋ฐ์ดํฐ๋ ๋ถ๋ณ์ฑ์ ๊ฐ์ง
let a = 1 // ์ฒซ ๋ฒ์งธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ 1์ด ํ ๋น
let b = 4 // ๋ ๋ฒ์งธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ 4๊ฐ ํ ๋น
console.log(a, b, a === b)
// 1 4 false
b = a // b๊ฐ ์ฐธ์กฐํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ a๊ฐ ์ฐธ์กฐํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก ๋ณ๊ฒฝ
console.log(a, b, a === b)
// 1 1 true
a = 7 // ์ธ ๋ฒ์งธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ 7์ด ํ ๋น
console.log(a, b, a === b)
// 7 1 false
let c = 1 // ์ฒซ ๋ฒ์งธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐ(๋ค ๋ฒ์งธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ 1์ ํ ๋นํ๋ ๊ฒ์ด ์๋)
console.log(b, c, b === c)
// 1 1 true
์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๊ฐ๋ณ์ฑ์ ๊ฐ์ง(๋ถ๋ณ์ฑX?)
โ ์๊ธด ๊ฒ์ด ๋๊ฐ์๋ ์๋ก ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ ์ ์๋ค
- ํ ๋น์ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ์ฃผ์๊ฐ ๋ฐ๋๋ฉด์ ๊ฐ๋ณ์ฑ์ ๊ฐ์ง
let a = {k: 1}
let b = {k: 1}
console.log(a, b, a === b)
// {k: 1} {k: 1} flase
a.k = 7
b = a
console.log(a, b, a === b)
// {k: 7} {k: 7} true
a.k = 2
console.log(a, b, a === b)
// {k: 2} {k: 2} true
let c = b // b ์ ๊ฐ์ด c ๋ก ๋ณต์ฌ๋๋ ๊ฒ์ด ์๋, ๊ฐ์ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ค๋ ๊ฒ!
console.log(a, b, c, a === c)
/// {k: 2} {k: 2} {k: 2} true
a.k = 9
console.log(a, b, c, a === c)
// {k: 9} {k: 9} {k: 9} true
// a ์ k ๊ฐ๋ง ๋ฐ๊ฟจ๋๋ฐ b, c ๋ํ a ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ๋ฐ๋
- a = b ๋ก ํ ๋นํ ๋ a ์ b๋ฅผ ์์ ํ ๊ตฌ๋ถํด์ ์ฌ์ฉํ๋ ค๋ฉด ๋ณต์ฌ๋ฅผ ํตํด ํ ์ ์์(์์๋ณต์ฌ, ๊น์๋ณต์ฌ)
์์ ๋ณต์ฌ(Shallow copy), ๊น์ ๋ณต์ฌ(Deep copy)
์์ ๋ณต์ฌ โ (๊ฐ์ฒดโ๋ง' ๋ณต์ฌ)
1. Object.assgin()
const user = {
name: 'zerone',
age: 98,
emails: '[email protected]'
}
**const copyUser = Object.assing({}, user)**
console.log(copyUser === user)
// false
user.age = 25
console.log('user', user)
// {name: 'zerone', age: 25, emails: '[email protected]'}
console.log('copyUser', copyUser)
// {name: 'zerone', age: 98, emails: '[email protected]'}
2. ์ ๊ฐ ์ฐ์ฐ์
const user = {
name: 'zerone',
age: 98,
emails: '[email protected]'
}
**const copyUser = {...user}**
console.log(copyUser === user)
// false
user.age = 25
console.log('user', user)
// {name: 'zerone', age: 25, emails: '[email protected]'}
console.log('copyUser', copyUser)
// {name: 'zerone', age: 98, emails: '[email protected]'}
๊น์ ๋ณต์ฌ โ (๊ฐ์ฒด ๋ด๋ถ ํ๋กํผํฐ๋ ๋ณต์ฌ)
1. Lodash
import _ from 'lodash' // ์ธ๋๋ฐ(_) ๊ธฐํธ๊ฐ ํ๋์ ๊ฐ์ฒด ๋ฐ์ดํฐ
const user = {
name: 'zerone',
age: 98,
emails: ['[email protected]']
}
const copyUser = _.cloneDeep(user)
console.log(copyUser === user)
// false
user.age = 25
// console.log('user', user)
// console.log('copyUser', copyUser)
user.emails.push('[email protected]')
console.log('user', user)
// {name: 'zerone', age: 25, emails: Array(2)}
console.log('copyUser', copyUser)
// {name: 'zerone', age: 98, emails: Array(1)}
- _.clonseDeep()
- ์ฌ๊ท์ ์ผ๋ก ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด ๋ด๋ถ์ ๋ชจ๋ ๊ฒ์ ๋ณต์ฌ
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ [JS ๊ณต๋ถ๊ธฐ๋ก] ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ์ดํฐ์ ์์์ผํ ๊ฐ๋ ๋ค), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@zerone/JS-๊ณต๋ถ๊ธฐ๋ก-์๋ฐ์คํฌ๋ฆฝํธ-๋ฐ์ดํฐ์-์์์ผํ -๊ฐ๋ ๋ค์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค