diff --git a/src/lesson13/homework/immutability.test.ts b/src/lesson13/homework/immutability.test.ts index 649fc47b..52e58724 100644 --- a/src/lesson13/homework/immutability.test.ts +++ b/src/lesson13/homework/immutability.test.ts @@ -1,8 +1,12 @@ test("dummy test", () => undefined); -/* - -import { OriginalTeam, ExpectedTeam } from "./immutability"; +import { + OriginalTeam, + ExpectedTeam, + originalTeamToExpectedTeam, + originalArrayToExpectedArray, + originalTeamToExpectedTeam2, +} from "./immutability"; // Задание 1 test("team to team", () => { @@ -18,7 +22,7 @@ test("team to team", () => { roster: 25, }; - expect(originalTeamToExpectedTeam(originalTeam)).toBe(expectedTeam); + expect(originalTeamToExpectedTeam(originalTeam)).toStrictEqual(expectedTeam); }); // Задание 2 @@ -27,7 +31,9 @@ test("array to array", () => { const expectedArray = ["two", 3, 4, 5]; - expect(originalArrayToExpectedArray(originalArray)).toBe(expectedArray); + expect(originalArrayToExpectedArray(originalArray)).toStrictEqual( + expectedArray + ); }); // Задание 3 @@ -48,7 +54,5 @@ test("team to team deep", () => { }, }; - expect(originalTeamToExpectedTeam(originalTeam)).toBe(expectedTeam); + expect(originalTeamToExpectedTeam2(originalTeam)).toStrictEqual(expectedTeam); }); - -*/ diff --git a/src/lesson13/homework/immutability.ts b/src/lesson13/homework/immutability.ts index b802a088..d6f99afa 100644 --- a/src/lesson13/homework/immutability.ts +++ b/src/lesson13/homework/immutability.ts @@ -1,39 +1,68 @@ // // Задание 1 -// export type OriginalTeam = { -// size: number; -// name: string; -// league: string; -// }; - -// export type ExpectedTeam = { -// name: string; -// league: string; -// roster: number; -// }; - -// export const originalTeamToExpectedTeam = ( -// originalTeam: OriginalTeam -// ): ExpectedTeam => { -// // -// }; +export type OriginalTeam = { + size: number; + name: string; + league: string; +}; + +export type ExpectedTeam = { + name: string; + league: string; + roster: number; +}; + +export const originalTeamToExpectedTeam = ( + originalTeam: OriginalTeam + // eslint-disable-next-line + // @ts-ignore +): ExpectedTeam => { + const result: ExpectedTeam = { + name: "New York Badgers", + roster: 25, + league: originalTeam.league, + }; + + return result; +}; // // Задание 2 -// type SomeArray = Array; +type SomeArray = Array; + +export const originalArrayToExpectedArray = ( + originalArray: SomeArray + // eslint-disable-next-line + // @ts-ignore +): SomeArray => { + const newLastItem: number | string = originalArray[originalArray.length - 1]; + + const result: SomeArray = originalArray.slice(-2); -// const originalArrayToExpectedArray = (originalArray: SomeArray): SomeArray => { -// // -// }; + // eslint-disable-next-line @typescript-eslint/ban-ts-ignore + // @ts-ignore + result.push(newLastItem + 1); + result.unshift("two"); + + return result; +}; // // Задание 3 -// export type Team = { -// name: string; -// captain: { -// name: string; -// age: number; -// }; -// }; - -// export const originalTeamToExpectedTeam = (originalTeam: Team): Team => { -// // -// }; +export type Team = { + name: string; + captain: { + name: string; + age: number; + }; +}; + +export const originalTeamToExpectedTeam2 = ( + originalTeam: Team + // eslint-disable-next-line + // @ts-ignore +): Team => { + const result: Team = JSON.parse(JSON.stringify(originalTeam)); + + result.captain.age = 28; + + return result; +}; diff --git a/src/lesson13/homework/pureFunctions.test.ts b/src/lesson13/homework/pureFunctions.test.ts index 57656b90..fb0ec08f 100644 --- a/src/lesson13/homework/pureFunctions.test.ts +++ b/src/lesson13/homework/pureFunctions.test.ts @@ -1,44 +1,40 @@ test("dummy test", () => undefined); -/* - import { getTopName, Team, QsObj, createQs, parseQs } from "./pureFunctions"; test("it works", () => expect(true).toBe(true)); -// test("getTopName", () => { -// const teams: Team[] = [ -// { name: "Lions", score: 5 }, -// { name: "Tigers", score: 4 }, -// { name: "Bears", score: 6 }, -// { name: "Monkeys", score: 2 }, -// ]; - -// expect(getTopName(teams)).toBe("Bears"); -// }); - -// test("createQs", () => { -// const qsObj: QsObj = { -// page: "2", -// pageSize: "10", -// total: "205", -// somethingElse: "value", -// }; - -// expect(createQs(qsObj)).toBe( -// "?page=2&pageSize=10&total=205&somethingElse=value" -// ); -// }); - -// test("parseQs", () => { -// const qs = "?page=2&pageSize=10&total=205&somethingElse=value"; - - expect(parseQs(qs)).toBe({ +test("getTopName", () => { + const teams: Team[] = [ + { name: "Lions", score: 5 }, + { name: "Tigers", score: 4 }, + { name: "Bears", score: 6 }, + { name: "Monkeys", score: 2 }, + ]; + + expect(getTopName(teams)).toBe("Bears"); +}); + +test("createQs", () => { + const qsObj: QsObj = { page: "2", pageSize: "10", total: "205", somethingElse: "value", - }); + }; + + expect(createQs(qsObj)).toBe( + "?page=2&pageSize=10&total=205&somethingElse=value" + ); }); -*/ +test("parseQs", () => { + const qs = "?page=2&pageSize=10&total=205&somethingElse=value"; + + expect(parseQs(qs)).toStrictEqual({ + page: "2", + pageSize: "10", + total: "205", + somethingElse: "value", + }); +}); diff --git a/src/lesson13/homework/pureFunctions.ts b/src/lesson13/homework/pureFunctions.ts index 289a4961..632e5593 100644 --- a/src/lesson13/homework/pureFunctions.ts +++ b/src/lesson13/homework/pureFunctions.ts @@ -1,19 +1,52 @@ // // Задание 1 -// export type Team = { name: string; score: number }; +export type Team = { name: string; score: number }; -// export const getTopName = (teams: Team[]): string => { -// // -// }; +export const getTopName = ( + teams: Team[] + // eslint-disable-next-line + // @ts-ignore +): string => { + const maxTeam: Team = teams.reduce((maxTeam: Team, item: Team) => + item.score > maxTeam.score ? item : maxTeam + ); + + return maxTeam.name; +}; // // Задание 2 -// export type QsObj = Record; +export type QsObj = Record; + +export const createQs = ( + qsObj: QsObj + // eslint-disable-next-line + // @ts-ignore +): string => { + const params: Array = []; + + for (const [key, value] of Object.entries(qsObj)) { + params.push(`${key}=${value}`); + } -// export const createQs = (qsObj: QsObj): string => { -// // -// }; + return "?" + params.join("&"); +}; // // Задание 3 -// export const parseQs = (qs: string): QsObj => { -// // -// }; +export const parseQs = ( + qs: string + // eslint-disable-next-line + // @ts-ignore +): QsObj => { + qs = qs.replace("?", ""); + + const parser = (str: string, delimeter: string) => str.split(delimeter); + + const result = parser(qs, "&").reduce((result: {}, item) => { + const value = parser(item, "="); + // @ts-ignore + result[value[0]] = value[1]; + return result; + }, {}); + + return result; +}; diff --git a/src/lesson13/homework/ramdaPureFunctions.test.ts b/src/lesson13/homework/ramdaPureFunctions.test.ts index 9929b3bf..c421f7d0 100644 --- a/src/lesson13/homework/ramdaPureFunctions.test.ts +++ b/src/lesson13/homework/ramdaPureFunctions.test.ts @@ -1,5 +1,4 @@ test("dummy test", () => undefined); -/* import { getTopName, @@ -9,30 +8,37 @@ import { parseQs, } from "./ramdaPureFunctions"; -// }); +test("getTopName", () => { + const teams: Team[] = [ + { name: "Lions", score: 5 }, + { name: "Tigers", score: 4 }, + { name: "Bears", score: 6 }, + { name: "Monkeys", score: 2 }, + ]; -// test("createQs", () => { -// const qsObj: QsObj = { -// page: "2", -// pageSize: "10", -// total: "205", -// somethingElse: "value", -// }; + expect(getTopName(teams)).toBe("Bears"); +}); + +test("createQs", () => { + const qsObj: QsObj = { + page: "2", + pageSize: "10", + total: "205", + somethingElse: "value", + }; -// expect(createQs(qsObj)).toBe( -// "?page=2&pageSize=10&total=205&somethingElse=value" -// ); -// }); + expect(createQs(qsObj)).toBe( + "?page=2&pageSize=10&total=205&somethingElse=value" + ); +}); -// test("parseQs", () => { -// const qs = "?page=2&pageSize=10&total=205&somethingElse=value"; +test("parseQs", () => { + const qs = "?page=2&pageSize=10&total=205&somethingElse=value"; - expect(parseQs(qs)).toBe({ + expect(parseQs(qs)).toStrictEqual({ page: "2", pageSize: "10", total: "205", somethingElse: "value", }); }); - -*/ diff --git a/src/lesson13/homework/ramdaPureFunctions.ts b/src/lesson13/homework/ramdaPureFunctions.ts index b4b484f8..a0004342 100644 --- a/src/lesson13/homework/ramdaPureFunctions.ts +++ b/src/lesson13/homework/ramdaPureFunctions.ts @@ -1,23 +1,66 @@ -// import { -// compose, -// //... -// } from "ramda"; +import { + compose, + map, + reduce, + join, + toPairs, + concat, + replace, + split, +} from "ramda"; // // Задание 1 -// export type Team = { name: string; score: number }; +export type Team = { name: string; score: number }; + +const getTeamByMaxScore = (maxTeam: Team, item: Team): Team => { + if (item.score > maxTeam.score) { + return item; + } else { + return maxTeam; + } +}; + +const getTeamName = (item: Team): string => item.name; // eslint-disable-next-line // @ts-ignore -export const getTopName = compose(/* ... */); +export const getTopName = compose( + getTeamName, + reduce(getTeamByMaxScore, { name: "", score: 0 }) +); // // Задание 2 -// export type QsObj = Record; +export type QsObj = Record; // eslint-disable-next-line +// eslint-disable-next-line @typescript-eslint/ban-ts-ignore // @ts-ignore -export const createQs = compose(/* ... */); +export const createQs = compose( + concat("?"), + join("&"), + map(join("=")), + // eslint-disable-next-line @typescript-eslint/ban-ts-ignore + // @ts-ignore + toPairs +); // eslint-disable-next-line // @ts-ignore // Задание 3 -export const parseQs = compose(/* ... */); + +const show = (x) => x; + +const reduceIterator = (acc: object, elem: Array) => { + // eslint-disable-next-line @typescript-eslint/ban-ts-ignore + // @ts-ignore + acc[elem[0]] = elem[1]; + return acc; +}; + +export const parseQs = compose( + show, + reduce(reduceIterator, {}), + map(split("=")), + split("&"), + replace("?", "") +);