์ด ๋ฌธ์ ๋ ํจ์ transform์ด ์ฃผ์ด์ง๋ฉด ํจ์์ ๋ง๊ฒ ์ ๋ ฌ์ ํ๋ sortBy๋ผ๋ ํจ์๋ฅผ ๊ตฌํํ๋ ๋ฌธ์ ์๋ค. ์ค์ ๋ฉ์๋ sort๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ ์ ์์ด์ ํธํ์ผ๋ฉฐ ์ด๋ฅผ ์ ํ์ฉํด์ ์ค์ sort ๋ฉ์๋์ฒ๋ผ ๊ตฌํํ๋ ๋ฌธ์ ์๋ค.
๋์ ์ฝ๋๋จผ์ ์ดํด๋ณด์!
_.sortBy = function (arr, transform, order) {
//์๋ก์ด ๋ฐฐ์ด์ ํ๋ ๋ณต์ฌํด์จ๋ค.
let newArr = _.slice(arr);
order = order || 1;
transform = transform || _.identity;
return newArr.sort(function (a, b) {
if (order > 0) {
// ์ค๋ฆ ์ฐจ์
return transform(a) < transform(b) ? -1 : 0;
} else {
// ๋ด๋ฆผ ์ฐจ์
return transform(a) > transform(b) ? -1 : 0;
}
});
return newArr;
};
๋๋ ์ด๋ฐ์์ผ๋ก ์ธ๋๋ฐ sortBy๋ฅผ ๊ตฌํํ์๋ค. ์ด ๋ฌธ์ ๋ ์ ๋ง ๊ฐ๊ฐ ๋ค๋ฅธ ์ฝ๋๋ค์ด ๋์จ ๊ฒ ๊ฐ๋ค.
์๋์ฝ๋๋ ๊ฐ๋จํ ์์ฝํ์๋ฉด.
1.transform์ด๋ผ๋ ์ฝ๋ฐฑํจ์๊ฐ ์์ ๊ฒฝ์ฐ์ ์์ ๊ฒฝ์ฐ๋ก ๋จผ์ ๋๋ ์ค์ผ ๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค.
=> ๋๋ฒ์งธ ์ธ์๊ฐ์ transform์ด undefined๊ฐ ์๋๋ผ๋ฉด ์ฝ๋ฐฑํจ์๊ฐ ์ ์ฉ๋ ๊ฒ์ด๊ณ , undefined์ด๊ฑฐ๋ _.identity๊ฐ ์๋ค๋ฉด ๋ฐ๋์ _.identity(๊ทธ๋๋ก ๋ฐํํ๋ ํจ์)๊ฐ ์ ์ฉ ๋ ๊ฒ์ด๋ค.
2.๊ทธ ๋ค์ ์๋ก์ด ๋ฐฐ์ด์ ๊ฐ์ ธ์์ ์๋ก์ด ๋ฐฐ์ด์ ์ ๋ ฌํด์ฃผ๊ณ ๋ฐํ์ ํด์ค์ผ ๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค. (slice ์ฌ์ฉ, ๋น ๊ฐ์ฒด์๋ค๊ฐ push๋ฅผ ํ๋ ๋ถ๋ ๊ณ์
จ์)
=> ์๋ณธ์ ๋ฐ๊พธ์ง ์์ ์ํ์์ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๊ธฐ ์ํด์์ด๋ค. ์๋ณธ์ด ์์ ๋๋ฉด ์ฝ๋๋ฅผ ์จ๋ด๋ ค๊ฐ๋ ๊ณผ์ ์์ ํ๋ค์ด์ง๊น๋ด ๊ทธ๋ฌ๋ค.
3.์ค๋ฆ ์ฐจ์, ๋ด๋ฆผ์ฐจ์ ๋๋ ๋๊ฐ ์ฌ์ค ์กฐ๊ธ ํด๋งธ์๋๋ฐ ์ ๋ถ๋ถ์ sort mdn ์ ๊ฒ์ํด์ ์์ธํ ์ฝ์ด๋ณธ ํ์ ์ ์ฉํ ์ ์์๋ค!!
4.์กฐ๊ฑด๋ฌธ์ ์ต๋ํ ๊ฐ์ํ ํ๊ธฐ ์ํด shortcut circuit ์ ์ผ๋๋ฐ, ์ด๊ฒ๋ ์๊ณ ๋ ์์์ง๋ง ์ ํํ ์ฌ์ฉ๋ฒ์ ๋ชจ๋ฅด๊ณ ์์๋ค ใ ใ
5.๋คํํ๋ ์ค๋ ์ ๊ท์๊ฐ์ ์๋ ค์ฃผ์ จ๊ณ ๋ฐ๋ก ์ ์ฉํ๋๋, ์ ์ฉํ ํ์ ์ฝ๊ฒ ํ ์ ์์๋ค!
6.๊ทธ ํ์ ์ฝ๋๋ฅผ ์กฐ๊ธ ์์ ํ์๋ค. ํ์คํ shortcut circuit ๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๊ฐ 5์ค ์ ๋ ์ค์๋ค.. (์ฒ์ ์ ์ ์ฝ๋๋ 20์ค ๊ฐ๊น์ด๋ ๋์ ๊ฒ์ด๋คโฆ)
๊ทธ ๋ค์ ๋ ํผ๋ฐ์ค ์ฝ๋๋ฅผ ์ดํด๋ณด์!
_.sortBy = function (arr, transform, order) {
order = order || 1;
transform = transform || _.identity;
const arrCloned = _.slice(arr);
return arrCloned.sort(function (a, b) {
if (transform(a) < transform(b)) {
return -1 * order;
}
return order;
});
};
์ ๋ง ๊ฐ๊ฒฐํ๋คโฆ ๋ด ์ฝ๋์ ๋ช ์ค์ 1์ค๋ก ์ค์ฌ๋ฒ๋ฆฌ๋ ๋ง๋ฒโฆ ์ญ์ ๋๋จํ๋ค..
ํญ์ ๋ณด๊ณ ๋ฐ์ฑํ์ง๋งโฆ ์ ํญ์ ๋๋ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ง๊ธฐ๋ ํ๋ ๊ฑธ๊น ใ ใ
์ฝ๋๋ฅผ ๋ณด๊ณ โ์~โฆ. ์ด๋ ๊ฒ ํ๋ฉด ๋๋ ๊ตฌ๋โ ํ๊ณ ๋ฐ๋ก ์ดํด๋ ํ๋๋ฐ
๋ฌธ์ ๋ฅผ ํ ๋น์์๋ ์ ~~~ํ ์๊ฐ์ด ์๋๋ค. ์ผ๋จ ํ๊ณ ๋ด์ผํ๋๊น.. ์ธ์ ๊ฐ ๋ ์ํด์ง๋ฉด ๊ฐ๊ฒฐํ ์ฝ๋๋ ์งค ์ ์์๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ค.
sort ๋?
sort ๋?
๋ฐฐ์ด์ ์์๋ฅผ ์ ์ ํ ์์น์ ์ ๋ ฌํ ํ ๊ทธ ๋ฐฐ์ด์ ๋ฐํํ๋ ๋ฉ์๋
ํ์คํ sortํจ์๋ ์์ ์ฝ๋๋ฅผ ๋ด์ผ ์ดํด๊ฐ ๋๋ค.
sort ํ์ ๋ง๋ค ์ ๋ ฌ
const alpa = ["c", "e", "a", "d", "b"];
alpa.sort(); // ["a", "b", "c", "d", "e"]
const number = [3, 5, 1, 2, 4, 6];
// ์ค๋ฅ
number.sort(); // ์ซ์์๋ ์ ์ฉ๋์ง ์์ (ASCII ๋ฌธ์ ์์๋ก ์ ๋ ฌ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.)
// ์ค๋ฆ ์ฐจ์
number.sort(function (a, b) {
return a - b;
}); // 1, 2, 3, 4, 5, 6
// ๋ด๋ฆผ ์ฐจ์
number.sort(function (a, b) {
return b - a;
}); // 6, 5, 4, 3, 2, 1
const whoAmI = [
{name: "์ฐ์ฑ", age: 28},
{name: "์ฝ๋ฉ", age: 40},
{name: "๊น๋ธ๋ก๊ทธ", age: 1},
{name: "์ฌ๋ฐ์ด์", age: 99}
];
/* ์ด๋ฆ์ */
whoAmI.sort(function (a, b) {
// ์ค๋ฆ์ฐจ์
return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
// ๊น๋ธ๋ก๊ทธ, ์ฐ์ฑ, ์ฌ๋ฐ์ด์, ์ฝ๋ฉ
});
whoAmI.sort(function (a, b) {
// ๋ด๋ฆผ์ฐจ์
return a.name > b.name ? -1 : a.name < b.name ? 1 : 0;
// ์ฝ๋ฉ, ์ฌ๋ฐ์ด์, ์ฐ์ฑ, ๊น๋ธ๋ก๊ทธ
});
/* ๋์ด์ */
whoAmI.sort(function (a, b) {
// ์ค๋ฆ์ฐจ์
return a.age - b.age;
// 1, 28, 40, 99
});
whoAmI.sort(function (a, b) {
// ๋ด๋ฆผ์ฐจ์
return b.age - a.age;
// 99, 40, 28, 1
});
์ ๋ ฌํ Array์ ์์์ ๊ฐ์๊ฐ 2๊ฐ ๋ฏธ๋ง์ผ ๊ฒฝ์ฐ โsort is not a functionโ ์ค๋ฅ๊ฐ ๋๋ค.
์ค๋ ๋
ผ๋ฆฌ์ฐ์ฐ์ OR || ์ ๋ํด ๋ฐฐ์ ๊ธฐ ๋๋ฌธ์, ๋ธ๋ก๊น
์ ํด๋ณผ ๊ฒ ์ด๋ค!
true || true;
// true
true || false;
// true;
false || false;
// false
์๋ฐ์คํฌ๋ฆฝํธ ๋ ผ๋ฆฌ ์ฐ์ฐ์์๋ ๋๊ฐ์ง ์ค์ํ ํน์ฑ์ด ์๋ค.
์ฒซ์งธ, ์ผ์ชฝ๋ถํฐ ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก evalutae๋ฅผ ํ๋ค.
๋์งธ, ๋ง์ฝ ์ฒซ๋ฒ์งธ ํผ์ฐ์ฐ์ ํจ์๊ฐ true์ด๋ฉด ์์ํท์ ๋๋ฒ์งธ ํผ์ฐ์ฐ์ ํจ์๋ฅผ ํ์ธ์กฐ์ฐจ ํ์ง ์๋๋ค.
true || ????
//true
๊ทธ๋ฌ๋ฉด ์๋ ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ดํด๋ฅผ ํด ๋ณด์!
๊ฐ์ฒด ๋ด๋ถ์๋ name๊ณผ age๊ฐ ์๋ค. ํ์ง๋ง ๊ฐ์ฒด whoAreYou์ job์ ์์๋ณด๊ณ ์ ํ ๋,
๋ฌธ์ ๋ jop์ด๋ผ๋ key๊ฐ์ด ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ์์ง ๋ชปํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ ||์ ์์ํท์ ์ฌ์ฉํ์ฌ ์ด๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
const whoAreYou = {
name: "Useong",
age: 28
};
console.log(whoAreYou.job || "unemployed");
// 'unemployed'
whoAreYou.job์ด ์กด์ฌํ์ง ์์ผ๋ฉด undefined ๋ฅผ ๋ฐํํ๋ค. undefined๋ ๊ฑฐ์ง ๊ฐ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฌ๊ธฐ์ ||์ ๋ค๋ฅธ ๋ถ๋ถ์ ์๋ value๊ฐ์ด ๋ฌด์์ด๋ ๊ทธ๊ณณ์ ์๋ ๊ฐ์ ๋ฐํํ ๊ฒ์ด๋ค.
๋ ๋ค๋ฅธ ์์
const a;
const b = null;
const c = undefined;
const d = 7;
const e = "true";
const f = a || b || c || d || e;
console.log(f); // ???
์ ๋ต์??
์ ๋ต์ 7์ด๋ค!!
const a; // undefined (falsy value)
const b = null; // null (falsy value)
const c = undefined; // undefined (falsy value)
const d = 7; // number (NOT falsy)
const e = "true"; // assigment short circuits before reaching here
const f = a || b || c || d || e;
console.log(f); // 7
์์ํท ๊ฐ๋ ์ด ํท๊ฐ๋ฆฌ๋ฉด ๋ค์ ์ด๊ฑธ ๋ณด๋ฉด์ ์ดํดํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค!
์ค๋ ๊ณผ์ ๋ ์ ๋ ์ ๋๋ด์ ํ๊ฒฐ ๊ธฐ๋ถ์ด ์ข์ ํ๋ฃจ๋ค~!
์ด๋ ๊ฒ ์ธ๋๋ฐ ์คํ๋ฆฐํธ๋ ๋์ด๋ฌ๋ค!!!:punch: :punch: :punch:
๐ ๋ด์ผ์ TIW(today I Will)
์ค๋ ์ฐํด ๋์ ํ๋ก๊ทธ๋๋จธ์ค 1๋จ๊ณ ๋ค ํ๊ธฐ!! (๊ธฐํ๋๋ฉด 2๋จ๊ณ๋ ํ๊ธฐ)