Playing with data structures in Javascript - Lee-hyuna/33-js-concepts-kr GitHub Wiki
μλ°μ€ν¬λ¦½νΈλ λ§€μΌ μ§ννκ³ μμ΅λλ€. React , Angular , Vue , NodeJS , Electron , React Native μ κ°μ νλ μμν¬ λ° νλ«νΌμ΄ λΉ λ₯΄κ² μ±μ₯ν¨μ λ°λΌ ν° κ·λͺ¨μ μ ν리μΌμ΄μ μ μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ κ²μ΄ μΌλ°μ μ΄ λμμ΅λλ€. μλ°μ€ν¬λ¦½νΈκ° jqueryμ μμ‘΄νλ μλλ μ§λ¬μ΅λλ€. λν μ΄μ λ νΉμ λ¬Έμ μ μ ν©ν ν΄μ΄ 무μμΈμ§ μ΄ν΄νκ³ , ν¨μ¨μ μ΄κ³ μ±λ₯μ΄ λ°μ΄λ μμ©νλ‘κ·Έλ¨μ μμ±νλ κ²μ΄ μ€μν©λλ€.
μ΄λ¬ν μ΄μ μμ λ°μ΄ν° ꡬ쑰 λ λ§€μ° μ€μν©λλ€. μκΈ°μ£Όλ νμ΅ νλ‘κ·Έλλ¨ΈμκΈ° λλ¬Έμ μ‘Έμ ν λκΉμ§ λ°μ΄ν° ꡬ쑰λ₯Ό κ³΅λΆ ν μ μ΄ μμ΅λλ€. κ·Έλ¬λ μ΅κ·Όμ λλ μλ°μ€ν¬λ¦½νΈλ₯Ό κΈ°λ°μΌλ‘ ν λκ·λͺ¨ μμ© νλ‘κ·Έλ¨μ μμ νκ³ μμΌλ©°, μ¬λ°λ₯Έ μν©μμ μ¬λ°λ₯Έ λꡬλ₯Ό μ¬μ©νλ κ²μ΄ μ€μνλ€λ κ²μ κΉ¨λ¬μμ΅λλ€. ( μ¬κΈ°μ λꡬ λ λ°μ΄ν° ꡬ쑰λ§μ μ§μΉνμ§ μμ΅λλ€. μΆκ° λΈλ‘κ·Έ κ²μλ¬Όμμ λ€λ£° λ΄μ©). μ½λ μμμ μ½κ°μ κ°λ¨ν μμ λ§μΌλ‘λ μμ© νλ‘κ·Έλ¨μ μ±λ₯μ΄ ν¬κ² ν₯μ λ μ μμ΅λλ€.
μ΄ μ²« λ²μ§Έ λΈλ‘κ·Έ κΈμμλ κΈ°λ³Έ λ°μ΄ν° ꡬ쑰 μΈ μ€νμΌλ‘ μμ ν©λλ€.
μ€ν
μ€νμ μ΄ν΄νκΈ° μ½μ΅λλ€. μμ μ΄λ―Έμ§λ₯Ό 보면 μ€νμ λλΆλΆμ μμ±μ μ΄ν΄ν μ μμ΅λλ€. μμ νμλ μ€νμ 첫 λ²μ§Έ νλͺ©μ 'λΉ¨κ°' λΆλΆμ λλ€.( 'out'μ΄ μ°μ§μ°). κ·Έλ¬λ μ΄ νλͺ©μ μ κ±°νλ €λ©΄ λ€λ₯Έ νλͺ©λ€μ λ¨Όμ μ κ±°ν΄μΌλ§ νκΈ° λλ¬Έμ κ°μ₯ λ§μ§λ§μ μ κ±°λ κ²μ λλ€. κ°λ¨ν λ§ν΄μ μ€νμ 첫 λ²μ§Έ νλͺ©μ λ§μ§λ§μ μ κ±° λ νλͺ©μ λλ€.
μ½λλ₯Ό λμΌλ‘ λ³Έλ€λ©΄ λ λͺ ν ν΄μ§λλ€. ES6 ꡬ문μ μ¬μ©νμ¬ λ κΉλνκ³ μ΄ν΄νκΈ° μ½κ² λ§λ€μμ΅λλ€.
μ€νμ λͺ¨μ΅μ λ€μκ³Ό κ°μ΅λλ€.
class Stack {
constructor(){
}
push(item){
//push item to the stack
}
pop(){
//pull out the topmost item (last item) from stack
}
peek(){
// see what's the last item in stack
}
size(){
//no. of items in stack
}
isEmpty(){
// return whether the stack is empty or not
}
}
ν¨κ» μ½λλ₯Ό μμ±ν΄ λ΄ μλ€. λ΄λΆμ μΌλ‘ λ°°μ΄μ μ¬μ©νμ¬ μ€νμ νλͺ©μ λ€μκ³Ό κ°μ΄ μ μ₯ν μ μμ΅λλ€.
class Stack {
constructor(){
this._items = [];
}
...
λ³μ μ΄λ¦ μμ _ (λ°μ€)μ μ΄ λ³μκ° λ΄λΆμ μΌλ‘ λ§ μ¬μ©λμ΄μΌνλ©° μ€νμ μ΄λ€ μΈμ€ν΄μ€λ μ΄ λ³μμ μ κ·Όν΄μ μλλ€λ κ²μ μ λ¬νκΈ° μν΄ μ¬μ© λμμ΅λλ€.
μ€νμ λ€λ₯Έ λλ½λ λΆλΆμ ꡬνν΄ λ΄ μλ€.
class Stack {
constructor(){
this._items = []
}
push(item){
//push item to the stack
return this._items.push(item)
}
pop(){
//pull out the topmost item (last item) from stack
return this._items.pop()
}
peek(){
// see what's the last item in stack
return this._items[this._items.length-1]
}
size(){
//no. of items in stack
return this._items.length
}
isEmpty(){
// return whether the stack is empty or not
return this._items.length==0
}
}
μ€νμ κΈ°λ³Έ ꡬ쑰λ₯Ό μμ±νμ΅λλ€. κ·Έλ¬λ μ¬μ ν ꡬννκ³ μΆμ λͺ κ°μ§ κΈ°λ₯μ΄ μμ΅λλ€.
- μ΄κΈ°ννλ©΄μ μ€νμ μΌλΆ νλͺ©μ μ λ¬ ν μ μμ΄μΌν©λλ€.
- μ¬λ¬ νλͺ©μ νκΊΌλ²μ μΆκ°νκ³ , μ κ±°ν μ μμ΄μΌν©λλ€.
class Stack {
constructor(...items){
this._items = []
if(items.length>0)
items.forEach(item => this._items.push(item))
}
push(...items){
//push item to the stack
items.forEach(item => this._items.push(item) )
return this._items;
}
pop(count=0){
//pull out the topmost item (last item) from stack
if(count===0)
return this._items.pop()
else
return this._items.splice( -count, count )
}
peek(){
// see what's the last item in stack
return this._items[this._items.length-1]
}
size(){
//no. of items in stack
return this._items.length
}
isEmpty(){
// return whether the stack is empty or not
return this._items.length==0
}
}
ν¨μ¬ λμ 보μ λλ€. κ·Έλ¬λ μ¬μ ν λͺ κ°μ§ λ¬Έμ μ μ κ³ μ³μΌν©λλ€.
- μΈλΆμμ λꡬλ _items λ³μμ μ‘μΈμ€νμ¬ λ³κ²½ν μ μμ΅λλ€. ES6μμ WeakMap μ μ¬μ©νμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
- μ μ λ€μ μ€νμ΄μ€λ₯Ό μ€μΌμν€μ§ μμΌλ €λ©΄ Stackμ λ€μμ€νμ΄μ€λ₯Ό μ¬λ°λ₯΄κ² μ§μ ν΄μΌν©λλ€. μ΄λ₯Ό μν΄ μ 체 ꡬνμ ν΄λ‘μ λ‘ κ°μλλ€.
- μ€νμμ νμ¬ νλͺ©μ λ³Ό μμλ λ°©λ²μ΄ νμν©λλ€. μ΄λ₯Ό μν΄ toArray() λ©μλλ₯Ό μΆκ°ν©λλ€.
μλλ μ΄λ¬ν λ¬Έμ κ° ν΄κ²° λ μ΅μ’ ꡬν μ λλ€.
let Stack = (()=>{
let map = new WeakMap();
let _items = [];
class Stack {
constructor(...items){
// let's store our items array inside the weakmap
map.set(this, []);
// let's get the items array from map, and store it in _items for easy access elsewhere
_items = map.get(this);
//if constructor receives any items, it should be stacked up
this.push(..items)
}
push(...items){
//push item to the stack
items.forEach(item => _items.push(item) )
return _items;
}
pop(count=1){
//pull out the topmost item (last item) from stack
return _items.splice( -count, count )
}
peek(){
// see what's the last item in stack
return _items[_items.length-1]
}
size(){
//no. of items in stack
return _items.length
}
isEmpty(){
// return whether the stack is empty or not
return _items.length==0
}
toArray(){
return _items;
}}
return Stack;
})();
μ΅μ’ ꡬνμ λν μλμμ νμΈ κ°λ₯ν©λλ€. https://gist.github.com/anish000kumar/0fd37acc866a9577cf259980500b1bbe
μ€ν μ¬μ©
λ€μμ μ°λ¦¬κ° λ§λ μ€νμ μ¬μ©νλ μμ μμ μ λλ€.
let my_stack = new Stack(1,24,4);
// [1, 24, 4]
my_stack.push(23);
//[1, 24, 4, 23]
my_stack.push(1,2,342);
//[1, 24, 4, 23, 1, 2, 342]
my_stack.pop();
//[1, 24, 4, 23, 1, 2]
my_stack.pop(3);
//[1, 24, 4]
my_stack.isEmpty();
// false
my_stack.size();
// 3
my_stack.toArray();
//[1, 24, 4]