lodash
- A modern JavaScript utility library delivering modularity, performance, & extras
https://lodash.com/docs/4.17.15#sortedUniq
sortedUniq([1, 1, 2]) // ์ด๋ ๊ฒ ํธ์ถํ๋ฉด
=> [1, 2] // ์๋ ๊ฒ ๊ฐ๊ฐ ๋๊ฐ์ฉ ๋ฌถ์ ๋ฐฐ์ด์ ๋ณด์ฌ์ค๋ค.
sortedUniq([1, 1, 2, 1]) // ์ด๋ ๊ฒ ํธ์ถํ๋ฉด
=> [1, 2, 1] // ์๋ ๊ฒ ๊ฐ๊ฐ ๋๊ฐ์ฉ ๋ฌถ์ ๋ฐฐ์ด์ ๋ณด์ฌ์ค๋ค.
function sortedUniq(array) {
return (array && array.length)
? baseSortedUniq(array)
: [];
}
function baseSortedUniq(array, iteratee) {
let seen
let index = -1
let resIndex = 0
const { length } = array
const result = []
while (++index < length) {
const value = array[index], computed = iteratee ? iteratee(value) : value
if (!index || !eq(computed, seen)) {
seen = computed
result[resIndex++] = value === 0 ? 0 : value
}
}
return result
}
export default baseSortedUniq
function sortedUniq(array) {
// array ๊ฐ undefined ํน์ array๊ธธ์ด๊ฐ 1 ์ด์์ด๋ผ๋ฉด baseSortedUniq(array)๋ฅผ ์คํํ๊ณ ์๋๋ฉด ๋น array๋ฅผ return ํ๋ค.
return (array && array.length)
? baseSortedUniq(array)
: [];
}
baserSotredUniq(array)ํจ์๋ฅผ ๋ณด์๋ฉด array์ด์ธ์ iteratee๋ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ lodashํจ์์ด์ง๋ง ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ array๋ง ๋๊ฒจ์ค ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ค์ iteratee๋ undefined๊ฐ ๋ค์ด์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ฐ ๋ฐ๋ ํจ์์ ํ๋๋ง ์ ๋ฌํ๊ณ console์ ์ฐ์ผ๋ฉด undefined๊ฐ ์ฐํ๋๊ฑธ ํ์ธํ ์ ์๋ค.
function baseSortedUniq(array, iteratee) {
// ์ฒซ index๋ฅผ -1๋ก ์ง์ ํด์ฃผ๊ณ ๋ฐ์ while๋ฌธ์ ์คํํ๊ธฐ์ ++index prefgix๋ก 1์ฉ ๋ํด์ค ์์
let seen
let index = -1
let resIndex = 0
const { length } = array
// ๊ฒฐ๊ณผ ๊ฐ์ ๋ด์ ๋น array
const result = []
// ๋ฐฐ์ด์ ๊ธธ์ด๋ณด๋ค ํ๋ ์์ index๊ฐ ๋งํผ ๋๋ค. ์ฆ ๋ชจ๋ array๋ฅผ ๋๋ ๊น์ง ์คํํ๋ while ๋ฌธ
while (++index < length) {
// array์ index์ value๋ฅผ ๋ณ์ value์ ๋ด๋๋ค
// computed ๋ณ์๋ iteratee๊ฐ undefined์ด๋ฉด ํด๋น value๋ฅผ computed ๋ณ์์ ๋ด๋๋ค. (ํ์ฌ์ ๊ฒฝ์ฐ์ ํด๋น)
const value = array[index],
computed = iteratee ? iteratee(value) : value;
// ๋ ๊ฐ์ ๋น๊ตํ๋ .eq lodash ํจ์๊ฐ ์ฌ์ฉ๋์๋ค.
// console.log(_.eq("Geeks", "Geeks" )); => true ๋ฅผ ๋ฆฌํดํจ
// !index๋ index๊ฐ 0์ด๊ฑฐ๋ ํน์ computed!==seen ์ด ์๋๊ฒฝ์ฐ,
// ์ฆ ๋งจ์ฒ์ loop์์ ํด๋น if๋ฌธ์ ํ๊ฑฐ๋ ํน์ ์ด์ ์ ์ ์ฅํ computed๊ฐ๊ณผ seen์ด ๋ค๋ฅผ๋ ํด๋น if ๋ฌธ์ ํ ๊ฒ์ด๋ค.
if (!index || !eq(computed, seen)) {
// ํด๋น loop์์์ computed๊ฐ์ seen์ ๋ฃ์ด์ค๋ค.
seen = computed;
// ์ด์ ๊ฐ๊ณผ ์ค๋ณต๋์ง ์์ ๊ฒฝ์ฐ์๋ง value๋ก ๋ฃ์ด์ค๋ค.
result[resIndex++] = value === 0 ? 0 : value;
}
}
return result;
}