Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@
|23.11.26|2회차|Ch 5 ~ 7|PART 1. 액션과 계산, 데이터|- 더 좋은 액션 만들기|
|23.12.06|3회차|Ch 8 ~ 9|PART 1. 액션과 계산, 데이터|- 계층형 설계 I<br />- 계층형 설계 II|
|23.12.23|4회차|Ch 10 ~ 12|PART 2. 일급 추상|- 일급 함수 I<br />- 일급 함수 II<br />- 함수형 반복|
|24.01.03|5회차|-|쉬어가기|코드 실습 및 리뷰|
|24.01.10|6회차|Ch 13 ~ 14|PART 2. 일급 추상|- 함수형 도구 체이닝<br />- 중첩된 데이터에 함수형 도구 사용하기|
|24.01.17|7회차|Ch 15 ~ 17|PART 2. 일급 추상|- 타임라인 격리하기<br />- 타임라인 사이에 자원 공유하기<br />- 타임라인 조율하기|
|24.01.24|8회차|Ch 18 ~ 19|PART 2. 일급 추상|- 반응형 아키텍처와 어니언 아키텍처<br />- 함수형 프로그래밍 여행에 앞서|
|24.01.05|5회차|-|쉬어가기|코드 실습 및 리뷰|
|24.01.12|6회차|Ch 13 ~ 14|PART 2. 일급 추상|- 함수형 도구 체이닝<br />- 중첩된 데이터에 함수형 도구 사용하기|
|24.01.19|7회차|Ch 15 ~ 17|PART 2. 일급 추상|- 타임라인 격리하기<br />- 타임라인 사이에 자원 공유하기<br />- 타임라인 조율하기|
|24.01.26|8회차|Ch 18 ~ 19|PART 2. 일급 추상|- 반응형 아키텍처와 어니언 아키텍처<br />- 함수형 프로그래밍 여행에 앞서|

<br />

Expand Down
65 changes: 49 additions & 16 deletions src/utils/groupBy.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,79 @@

// 어떤 것을 해볼까요?
const groupBy = (arr, callback) => {
return arr;
if (typeof callback === "number") {
console.log("number");
return arr.reduce(
(obj, element) => addElement(obj, element[callback], element),
{}
);
}
if (!Array.isArray(arr) && typeof arr === "object") {
console.log("object");
return Object.values(arr).reduce(
(obj, element) => addElement(obj, callback(element), element),
{}
);
}
if (typeof callback === "function") {
console.log("function");
return arr.reduce(
(obj, element) => addElement(obj, callback(element), element),
{}
);
}
throw new Error("Can't do anything.");
};

describe('groupBy 테스트', () => {
describe('non-lazy', () => {
it('case: 1, Normal', () => {
const addElement = (obj, key, value) => {
if (obj.hasOwnProperty(key)) {
obj[key] = [...obj[key], value];
} else {
obj[key] = [value];
}
return obj;
};

describe("groupBy 테스트", () => {
describe("non-lazy", () => {
it("case: 1, Normal", () => {
const array = [6.1, 4.2, 6.3];
const grouped = groupBy(array, Math.floor);

expect(grouped).toEqual({ 4: [4.2], 6: [6.1, 6.3] });
});

it('case: 2, Advanced', () => {
it("case: 2, Advanced", () => {
const array = [
[1, 'a'],
[2, 'a'],
[2, 'b'],
[1, "a"],
[2, "a"],
[2, "b"],
];

// 두 번째 인자가 index
const [groupedFirstIndex, groupedSecondIndex] = [groupBy(array, 0), groupBy(array, 1)];
const [groupedFirstIndex, groupedSecondIndex] = [
groupBy(array, 0),
groupBy(array, 1),
];

expect(groupedFirstIndex).toEqual({
1: [[1, 'a']],
1: [[1, "a"]],
2: [
[2, 'a'],
[2, 'b'],
[2, "a"],
[2, "b"],
],
});

expect(groupedSecondIndex).toEqual({
a: [
[1, 'a'],
[2, 'a'],
[1, "a"],
[2, "a"],
],
b: [[2, 'b']],
b: [[2, "b"]],
});
});

it('case: 3, Advanced', () => {
it("case: 3, Advanced", () => {
const grouped = groupBy({ a: 6.1, b: 4.2, c: 6.3 }, Math.floor);

expect(grouped).toEqual({ 4: [4.2], 6: [6.1, 6.3] });
Expand Down
23 changes: 17 additions & 6 deletions src/utils/unique.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,23 @@

// 어떤 것을 해볼까요?
const unique = (arr, callback, isSorted) => {
return arr;
return arr.reduce(
(board, element) => {
const key = JSON.stringify(element);
if (!board.obj.hasOwnProperty(key)) {
board.obj[key] = true;
board.result.push(element);
isSorted && board.result.sort();
}
return board;
},
{ result: [], obj: {} }
).result;
};

describe('unique 테스트', () => {
describe('non-lazy', () => {
it('case: 1, Normal', () => {
describe("unique 테스트", () => {
describe("non-lazy", () => {
it("case: 1, Normal", () => {
const [firstArray, secondArray] = [
[2, 1, 2],
[1, 2, 1],
Expand All @@ -19,7 +30,7 @@ describe('unique 테스트', () => {
expect(secondUniqueArray).toEqual([1, 2]);
});

it('case: 2, Advanced', () => {
it("case: 2, Advanced", () => {
const [firstArray, secondArray, thirdArray] = [
[1, 2, 3],
[1, 1, 2, 2, 3],
Expand All @@ -34,7 +45,7 @@ describe('unique 테스트', () => {
expect(thirdUniqueArray).toEqual([1, 2, 3]);
});

it('case: 3, Advanced', () => {
it("case: 3, Advanced", () => {
const objects = [
{ x: 1, y: 2 },
{ x: 2, y: 1 },
Expand Down