fix: merge daily data and original data properly
This commit is contained in:
parent
348189ef62
commit
1b57aad7af
2 changed files with 29 additions and 17 deletions
|
|
@ -5,6 +5,7 @@ import School from './models/School'
|
||||||
import type { Timetable } from './models/Timetable'
|
import type { Timetable } from './models/Timetable'
|
||||||
import { encodeBase64, encodeEUCKR } from './utils/encode'
|
import { encodeBase64, encodeEUCKR } from './utils/encode'
|
||||||
import { parseResponse } from './utils/parse'
|
import { parseResponse } from './utils/parse'
|
||||||
|
import { mergeMap } from './utils/array'
|
||||||
|
|
||||||
export default class Comcigan {
|
export default class Comcigan {
|
||||||
private readonly rest = axios.create({
|
private readonly rest = axios.create({
|
||||||
|
|
@ -56,29 +57,29 @@ export default class Comcigan {
|
||||||
const teachersLen = Math.floor(Math.log10(teachers.length - 1)) + 1
|
const teachersLen = Math.floor(Math.log10(teachers.length - 1)) + 1
|
||||||
const subjects = data[`자료${subjectCode}`] as string[]
|
const subjects = data[`자료${subjectCode}`] as string[]
|
||||||
|
|
||||||
const original = data[`자료${originalCode}`] as (number | undefined)[][][][]
|
const original = data[`자료${originalCode}`] as number[][][][]
|
||||||
const day = data[`자료${dayCode}`] as number[][][][]
|
const now = data[`자료${dayCode}`] as number[][][][]
|
||||||
|
|
||||||
const getSubject = (code: number) =>
|
const getSubject = (code?: number) =>
|
||||||
subjects[Number(code.toString().slice(0, -teachersLen - 1))]
|
code
|
||||||
const getTeacher = (code: number) =>
|
? subjects[Number(code.toString().slice(0, -teachersLen - 1))]
|
||||||
teachers[Number(code.toString().slice(-teachersLen))]
|
: '없음'
|
||||||
|
const getTeacher = (code?: number) =>
|
||||||
return day.slice(1).map((grade, gIdx) =>
|
code ? teachers[Number(code.toString().slice(-teachersLen))] : '없음'
|
||||||
grade.slice(1).map((cls, cIdx) =>
|
|
||||||
cls.slice(1).map((day, dIdx) =>
|
|
||||||
day.slice(1).map((period, pIdx) => {
|
|
||||||
const origin = original[gIdx + 1][cIdx + 1][dIdx + 1][pIdx + 1]
|
|
||||||
const changed = period !== origin
|
|
||||||
|
|
||||||
|
return mergeMap(now.slice(1), original.slice(1), (gNow, gOrigin) =>
|
||||||
|
mergeMap(gNow.slice(1), gOrigin.slice(1), (cNow, cOrigin) =>
|
||||||
|
mergeMap(cNow.slice(1), cOrigin.slice(1), (dNow, dOrigin) =>
|
||||||
|
mergeMap(dNow.slice(1), dOrigin.slice(1), (pNow, pOrigin) => {
|
||||||
|
const changed = pNow !== pOrigin
|
||||||
return {
|
return {
|
||||||
subject: getSubject(period),
|
subject: getSubject(pNow),
|
||||||
teacher: getTeacher(period),
|
teacher: getTeacher(pNow),
|
||||||
changed,
|
changed,
|
||||||
...(changed
|
...(changed
|
||||||
? {
|
? {
|
||||||
originalSubject: origin ? getSubject(origin) : '없음',
|
originalSubject: getSubject(pOrigin),
|
||||||
originalTeacher: origin ? getTeacher(origin) : '없음',
|
originalTeacher: getTeacher(pOrigin),
|
||||||
}
|
}
|
||||||
: {}),
|
: {}),
|
||||||
} as Timetable
|
} as Timetable
|
||||||
|
|
|
||||||
11
src/utils/array.ts
Normal file
11
src/utils/array.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
export const mergeMap = <T, F>(
|
||||||
|
a: T[],
|
||||||
|
b: T[],
|
||||||
|
callbackFn: (a: T, b: T) => F,
|
||||||
|
): F[] => {
|
||||||
|
const result = []
|
||||||
|
for (let i = 0; i < Math.max(a.length, b.length); i++)
|
||||||
|
result.push(callbackFn(a[i], b[i]))
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue