[JavaScript] ๋ฐฐ์ด์์ ์ค๋ณต๋ ๊ฐ ์ ๊ฑฐํ๋ 4๊ฐ์ง ๋ฐฉ๋ฒ (set, filter, index of, reduce)
๐ค Set
set์ ์ค๋ณต๋ฐ์ดํฐ์ ์ฅ์ ํ์ฉํ์ง ์๋ ์๋ฃ๊ตฌ์กฐ์.
๊ทธ๋์ set์ ํ ๋ฒ ๊ฑฐ์น๋ฉด ์ค๋ณต์ ๊ฑฐ๊ฐ ๋๋ ๊ตฌ์กฐ.
๊ทผ๋ฐ ์๋ {}ํํ๋ก ๋์ด. ๋ค์ ๋ฐฐ์ด์ ํํ๋ก ๋ฐ๊พธ๋ ค๋ฉด
- [...set operator] ๋ฌธ๋ฒ์ด๋
- Array.form
์ด ๋ ๊ฐ์ง๋ก ๊ฐ๋จํ๊ฒ ๋ณํ์ด ๊ฐ๋ฅํจ
let arr = [1, 1, 2, 3, 1];
let newArr = new Set(arr); // {1, 2, 3}
console.log([...newArr]); // [1, 2, 3]
console.log(Array.form(newArr); // [1, 2, 3]
๐ค filter(), indexOf()
indexOf(element)๋ ๋ฐฐ์ด์์ ์์์ index๋ฅผ ๋ฆฌํดํ๋๋ฐ,
์ค๋ณต๊ฐ์ด ์์ ๊ฒฝ์ฐ ๋ฎ์ Index๋ฅผ ๋ฆฌํดํจ.
๊ทธ๋์ indexOf(element) === index๊ฐ true๊ฐ ๋๋ ๊ฒฝ์ฐ๋ ํ๋๋ฟ์ด๊ณ , ๋ค๋ฅธ ์ค๋ณต๋ ๊ฐ์ flase๊ฐ ๋ฆฌํด๋์ด filter์ ์ํด ๊ฑธ๋ฌ์ง.
์ฐธ๊ณ ๋ก filter(lambda)๋ ๋๋ค๊ฐ true์ผ ๋ ๊ทธ ์์๋ฅผ ๊ฒฐ๊ณผ์ ํฌํจ์ํด.
let arr = [1, 1, 2, 3, 1];
let newArr = arr.filter((element, index) => arr.indexOf(element) === index);
console.log(newArr); // [1, 2, 3]
๐ค reduce()
reduce()๋ ๋ฐฐ์ด ์์์ ๊ฐ๋ค์ ์์ฐจ์ ์ผ๋ก ์ํํ๋ฉด์ ํ๋์ ๊ฐ์ ๋ง๋๋ ํจ์์.
์ด๊ธฐ๊ฐ initialValue๊ฐ ์ฃผ์ด์ง๋ฉด, ๋ฐฐ์ด์ 0๋ฒ index๋ก๋ถํฐ ์ฐ์ฐ์ ์ํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ฐ์ฐ์ ์ธ์(accumulator)๋ก ์ ๋ฌํจ. (๋์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ ๋ฏ)
์๋ ์์ ๋ reduce๋ก ์ค๋ณต์ ๊ฑฐ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ธ๋ฐ accumulator์ ์ถ๊ฐ ์ ๋ ์์๋ผ๋ฉด ์ถ๊ฐํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ถ๊ฐํ์ง ์์.
+) ๋ฆฌ๋์ค๋ ์์ฃผ ์ฐ๋ ํจ์๋ผ ์์๋๋ฉด ์ข์ ๋ฏํ๋ค.
let arr = [1, 1, 2, 3, 1];
let newArr = arr.reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], [])
console.log(newArr); // [ 1, 2, 3]
๐ค for ๋ฐ๋ณต๋ฌธ
๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ชจ๋ ์์๋ฅผ ๋๋ฉด์ ์ค๋ณต๊ฐ์ ์ ๊ฑฐํ๋๋ก ๊ตฌํํ ์ ์์.
์๋ ์์ ๋ forEach๋ฅผ ์ฌ์ฉํด ๊ตฌํํ์
let arr = [1, 1, 2, 3, 1];
let newArr = [];
arr.forEach((element)=>{
if(!newArr.includes(element)){
newArr.push(element);
}
});
console.log(newArr); // [1, 2, 3]
TMI. ๋ ๋ณดํต ์ด๋ ๊ฒ ์ด๋ค. ๊ตฌ๋ฅ ์ ์ผ ๊ฐ๋จํ๊ธฐ ๋๋ฌธ
cosnt newArr = [...new Set(arr)]
๐ ๏ธ Reference
https://codechacha.com/ko/javascript-remove-duplicates-in-array/