sets introduction - Lee-hyuna/33-js-concepts-kr GitHub Wiki

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ Set μ†Œκ°œ

원문: Introduction to Sets in JavaScript β€” Alligator.io

Set은 고유 ν•œ κ°’μ˜ λͺ¨μŒμ„ λ§Œλ“€ 수 μžˆλŠ” ES6(ES2015)의 μƒˆλ‘œμš΄ 객체 μœ ν˜•μ΄λ‹€. Set의 값은 λ¬Έμžμ—΄ λ˜λŠ” μ •μˆ˜μ™€ 같은 μ›μ‹œκ°’ 일 수 μžˆμ§€λ§Œ 객체 λ¦¬ν„°λŸ΄ λ˜λŠ” λ°°μ—΄κ³Ό 같은 더 λ³΅μž‘ν•œ 객체 μœ ν˜•λ„ Set의 일뢀가 될 수 μžˆλ‹€.

λ‹€μŒμ€ κΈ°λ³Έ setκ³Ό add , size , has , forEach , delete 및 clear와 같이 μ‚¬μš© κ°€λŠ₯ν•œ λͺ‡ 가지 λ©”μ†Œλ“œλ₯Ό λ³΄μ—¬μ£ΌλŠ” κ°„λ‹¨ν•œ μ˜ˆμ΄λ‹€ .

let animals = new Set();

animals.add('🐷');
animals.add('🐼');
animals.add('🐒');
animals.add('🐿');
console.log(animals.size); // 4

animals.add('🐼');
console.log(animals.size); // 4 

console.log(animals.has('🐷')); // true
animals.delete('🐷');

console.log(animals.has('🐷')); // false

animals.forEach(animal => {
	console.log(`Hey ${animal}!`);
});
// Hey 🐼!
// Hey 🐒!
// Hey 🐿!
animals.clear();
console.log(animals.size); // 0

λ‹€μŒμ€ 배열을 μ „λ‹¬ν•˜μ—¬ Set을 μ΄ˆκΈ°ν™”ν•˜λŠ” 또 λ‹€λ₯Έ μ˜ˆμž…λ‹ˆλ‹€. μ΄ˆκΈ°ν™” 배열이 μ–΄λ–»κ²Œ λ³€ν•˜λŠ”μ§€ ν™•μΈν•΄λ³΄μž. μ€‘λ³΅λœ 값은 사라지고 λ‚˜μ€‘μ— μΆ”κ°€ 된 배열은 κ·ΈλŒ€λ‘œ μœ μ§€λœλ‹€.

let myAnimals = new Set(['🐷', '🐒', '🐷', '🐷']);

myAnimals.add(['🐨', 'πŸ‘']);
myAnimals.add({ name: 'Rud', type: '🐒' });
console.log(myAnimals.size); // 4

myAnimals.forEach(animal => {
	console.log(animal); 
});
// 🐷
// 🐒
// ["🐨", "πŸ‘"] 
// Object { name: "Rud", type: "🐒" }

λ¬Έμžμ—΄μ€ 반볡 κ°€λŠ₯ν•˜λ―€λ‘œ(iterable)μ΄λ―€λ‘œ Setλ₯Ό μ΄ˆκΈ°ν™” ν•˜κΈ° μœ„ν•΄ 전달 κ°€λŠ₯ν•˜λ‹€.

console.log('Only unique characters will be in this set.'.length); // 43

let sentence = new Set('Only unique characters will be in this set.'); console.log(sentence.size); // 18

Set에 forEach λ₯Ό μ‚¬μš©ν•œ 것 처럼, for…of 루프도 Set을 λ°˜λ³΅ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλ‹€.

let moreAnimals = new Set(['🐺', '🐴', 'πŸ•', 'πŸ‡']);

for (let animal of moreAnimals) {
	console.log(`Howdy ${ animal }`);
}

// Howdy 🐺  
// Howdy 🐴  
// Howdy πŸ•  
// Howdy πŸ‡

Keys와 Values

Setμ—λŠ” keys및 values λ©”μ†Œλ“œκ°€ 있으며 keys λŠ” values 의 별λͺ…μ΄λ―€λ‘œ 두 λ©”μ†Œλ“œλŠ” μ •ν™•νžˆ λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€. μ΄λŸ¬ν•œ λ©”μ†Œλ“œ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜λ©΄ Set에 μΆ”κ°€ 된 μˆœμ„œμ™€ λ™μΌν•œ μˆœμ„œλ‘œ Set에 값이 μžˆλŠ” μƒˆ 반볡자(iterator) 객체가 λ°˜ν™˜λœλ‹€. 예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

let partyItems = new Set(['πŸ•', '🍾', '🎊']);
let items = partyItems.values();

console.log(items.next());
console.log(items.next());
console.log(items.next());
console.log(items.next().done);

// Object {
//   done: false,
//   value: "πŸ•"
// }

// Object {
//   done: false,
//   value: "🍾"
// }

// Object {
//   done: false,
//   value: "🎊"
// }

// true

μ°Έκ³