From ea2a9ee4ca0edb5cb7ea420c551dd0537c3308a2 Mon Sep 17 00:00:00 2001 From: xjq Date: Sat, 19 Nov 2022 18:37:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=20sort=20answer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qs.yml | 4 +++- .github/workflows/server.yml | 2 -- qs.mjs | 4 ++-- question/FrontEnd/cache.prod.json | 2 +- question/FrontEnd/sort/answer.md | 20 ++++++++++++++++++++ server/src/qsdata/questions.json | 1 - server/src/service/question.ts | 3 --- 7 files changed, 26 insertions(+), 10 deletions(-) delete mode 100644 server/src/qsdata/questions.json diff --git a/.github/workflows/qs.yml b/.github/workflows/qs.yml index a4e954f..0e24fca 100644 --- a/.github/workflows/qs.yml +++ b/.github/workflows/qs.yml @@ -10,6 +10,7 @@ on: paths: - 'question/FrontEnd/**' - '.github/workflows/qs.yml' + - 'qs.mjs' - '!question/FrontEnd/cache.json' - '!question/FrontEnd/cache.prod.json' pull_request: @@ -17,6 +18,7 @@ on: paths: - 'question/FrontEnd/**' - '.github/workflows/qs.yml' + - 'qs.mjs' - '!question/FrontEnd/cache.json' - '!question/FrontEnd/cache.prod.json' @@ -42,7 +44,7 @@ jobs: - name: Create local changes run: | - pnpm qs:generate prod qstoken=${{ secrets.QS_TOKEN }} + pnpm qs:generate prod ${{ secrets.QS_TOKEN }} - name: Commit files run: | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" diff --git a/.github/workflows/server.yml b/.github/workflows/server.yml index a8068af..21899d6 100644 --- a/.github/workflows/server.yml +++ b/.github/workflows/server.yml @@ -12,7 +12,6 @@ on: - '.github/workflows/server.yml' - '!server/config/nginx.conf' - '!server/sql/**' - - '!server/qsdata/**' pull_request: branches: [main] paths: @@ -20,7 +19,6 @@ on: - '.github/workflows/server.yml' - '!server/config/nginx.conf' - '!server/sql/**' - - '!server/qsdata/**' # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: diff --git a/qs.mjs b/qs.mjs index 8d74753..e31acdc 100644 --- a/qs.mjs +++ b/qs.mjs @@ -8,8 +8,8 @@ const args = process.argv.slice(2); const isProd = !!args.find((arg) => arg === 'prod'); -let qsToken = args.find((arg) => /qstoken=/.test(arg)); -qsToken = qsToken.replace(/qstoken=/, ''); +let qsToken = args.find((arg) => /QS_TOKEN=/.test(arg)); +qsToken = qsToken.replace(/QS_TOKEN=/, ''); const cacheFile = isProd ? 'cache.prod.json' : 'cache.json'; diff --git a/question/FrontEnd/cache.prod.json b/question/FrontEnd/cache.prod.json index 9abe7db..4fe59e4 100644 --- a/question/FrontEnd/cache.prod.json +++ b/question/FrontEnd/cache.prod.json @@ -1 +1 @@ -{"amountThousandthsFormat":"c5769edfd07fbe31131bddccfb6affcff5f584cf930efdcef3853fbf3e7a3115","curry":"34daf8f9d968bd30f52083978db47e279f0be3a9bc3ad010dd91b31a6c852866","deepClone":"d59950508f0709bba97bb78a81c321004c430cc8303472eef963c5ccbb08ae85","deepMerge":"a9a3699b3679308f244c08845b324890859fac542dad7d7f00cf93f5343086cc","flatten":"a5eeb504b761ebd1487c0a02b9a2a86bc570b580b8807a2f5275610a8b48d29d","sort":"4b812ca790434ee9819bc10309abaa7ffb4a0831dda453293a41c94e4786392a","unique":"44979fd8039148151f6c5a964ce0217828053188363af31dd04264481316b1e0"} \ No newline at end of file +{"amountThousandthsFormat":"c5769edfd07fbe31131bddccfb6affcff5f584cf930efdcef3853fbf3e7a3115","curry":"34daf8f9d968bd30f52083978db47e279f0be3a9bc3ad010dd91b31a6c852866","deepClone":"d59950508f0709bba97bb78a81c321004c430cc8303472eef963c5ccbb08ae85","deepMerge":"a9a3699b3679308f244c08845b324890859fac542dad7d7f00cf93f5343086cc","flatten":"a5eeb504b761ebd1487c0a02b9a2a86bc570b580b8807a2f5275610a8b48d29d","sort":"c30d24e91c4b1cf0ab65f0aec17cf814fe1c799250478f8af306cc151de28a3f","unique":"44979fd8039148151f6c5a964ce0217828053188363af31dd04264481316b1e0"} \ No newline at end of file diff --git a/question/FrontEnd/sort/answer.md b/question/FrontEnd/sort/answer.md index fdf2c7c..50e4bc0 100644 --- a/question/FrontEnd/sort/answer.md +++ b/question/FrontEnd/sort/answer.md @@ -12,3 +12,23 @@ export default function sort(arr) { ### 方法二 快速排序 + +### 方法三 + +冒泡排序 + +```js +export default function sort(arr) { + let len = arr.length; + for (let i = 0; i < len - 1; i++) { + for (let j = 0; j < len - i; j++) { + if (arr[j] > arr[j + 1]) { + let temp = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = temp; + } + } + } + return arr; +} +``` diff --git a/server/src/qsdata/questions.json b/server/src/qsdata/questions.json deleted file mode 100644 index 071be39..0000000 --- a/server/src/qsdata/questions.json +++ /dev/null @@ -1 +0,0 @@ -{"amountThousandthsFormat":{"answermd":"### 方法一\n\n正则表达式\n\n```js\nexport default function amountThousandthsFormat(amount) {\n return amount.replace(/(? {\n assert.deepEqual(f('314'), '314');\n});\n\nit('输入 31415926', () => {\n assert.deepEqual(f('31415926'), '31,415,926');\n});\n\nit('带小数位: 输入 31415926.62', () => {\n assert.deepEqual(f('31,415,926.62'), '31,415,926.62');\n});\n\nit('带长小数位: 输入 31415926.629514', () => {\n assert.deepEqual(f('31,415,926.629514'), '31,415,926.629514');\n});\n"},"curry":{"answermd":"### 方法一\n\n```js\nexport default function currying(fn) {\n let _args = [];\n return (...args) => {\n let result = null;\n if (args.length) {\n _args = _args.concat(args);\n } else {\n result = fn(..._args);\n }\n return result;\n };\n}\n```\n","answer":"export default function f(fn) {\n let _args = [];\n return (...args) => {\n let result = null;\n if (args.length) {\n _args = _args.concat(args);\n } else {\n result = fn(..._args);\n }\n return result;\n };\n}\n","introduce":"实现一个柯里化函数\n\n未传递参数时真正调用\n\n用例 1:\n\n```js\nconst add = (...args) => args.reduce((a, b) => a + b, 0);\n\n// 输入 [add, [1], [2], [3], null]\n\n// 执行\nconst curryAdd = currying(add); // true\ncurryAdd(1); // null\ncurryAdd(2); // null\ncurryAdd(3); // null\ncurryAdd(); // 6\n\n// [true, null, null, null, 6]\n```\n\n用例 2:\n\n```js\nconst add = (...args) => args.reduce((a, b) => a + b, 0);\n\n// 输入 [add, [1, 2, 1], null, null, null]\nconst curryAdd = currying(add); // true\ncurryAdd(1, 2, 1); // null\ncurryAdd(); // 4\ncurryAdd(); // 4\ncurryAdd(); // 4\n\n// [true, null, 4, 4, 4]\n```\n\n用例 3:\n\n```js\nconst add = (...args) => args.reduce((a, b) => a + b, 0);\n\n// 输入 [add, [1, 2, 1], null, [1, 2], null]\nconst curryAdd = currying(add); // true\ncurryAdd(1, 2, 1); // null\ncurryAdd(); // 4\ncurryAdd(1, 2); // null\ncurryAdd(); // 7\n\n// [true, null, 4, null, 7]\n```\n\n用例 4:\n\n```js\nconst multi = (...args) => args.reduce((a, b) => a * b, 1);\n\n// 输入 [multi, [100], null, [1, 2], null]\nconst curryMulti = currying(multi);\ncurryMulti(100); // null\ncurryMulti(); // 100\ncurryMulti(1, 2); // null\ncurryMulti(); // 200\n// [true, null, 100, null, 200]\n```\n","desc":"实现一个柯里化函数","index":"/**\n * 柯里化函数\n *\n * @export\n * @param {Function} fn\n * @return {Function}\n */\nexport default function currying(fn) {\n return fn;\n}\n","test":"import f from './index.mjs';\nimport { it } from 'mocha';\nimport { assert } from 'chai';\n\nconst add = (...args) => args.reduce((a, b) => a + b, 0);\nconst multi = (...args) => args.reduce((a, b) => a * b, 1);\n\nfunction Received(Input) {\n let curry;\n const output = [];\n Input.forEach((arg) => {\n let result;\n if (!curry) {\n curry = f(arg);\n result = !!curry;\n } else if (arg) {\n result = curry(...arg);\n } else {\n result = curry();\n }\n output.push(result);\n });\n return output;\n}\n\nit('加法函数柯里化一: 输入 [add, [1], [2], [3], null]', () => {\n assert.deepEqual(Received([add, [1], [2], [3], null]), [\n true,\n null,\n null,\n null,\n 6,\n ]);\n});\n\nit('加法函数柯里化二: 输入 [add, [1, 2, 1], null, null, null]', () => {\n assert.deepEqual(Received([add, [1, 2, 1], null, null, null]), [\n true,\n null,\n 4,\n 4,\n 4,\n ]);\n});\n\nit('加法函数柯里化三: 输入 [add, [1, 2, 1], null, [1, 2], null]', () => {\n assert.deepEqual(Received([add, [1, 2, 1], null, [1, 2], null]), [\n true,\n null,\n 4,\n null,\n 7,\n ]);\n});\n\nit('乘法函数柯里化一: 输入 [multi, [100], null, [1, 2], null]', () => {\n assert.deepEqual(Received([multi, [100], null, [1, 2], null]), [\n true,\n null,\n 100,\n null,\n 200,\n ]);\n});\n"},"deepClone":{"answermd":"### 方法一\n\n递归拷贝, 使用 weakMap 过滤循环引用\n\n```js\nexport default function deepClone(obj, weakMap = new WeakMap()) {\n const type = Object.prototype.toString.call(obj);\n if (!(type === '[object Object]' || type === '[object Array]')) return obj;\n const o = type === '[object Object]' ? {} : [];\n if (weakMap.get(obj)) return o;\n weakMap.set(obj, true);\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n o[key] = deepClone(obj[key], weakMap);\n }\n }\n return o;\n}\n```\n","answer":"export default function deepClone(obj, weakMap = new WeakMap()) {\n const type = Object.prototype.toString.call(obj);\n if (!(type === '[object Object]' || type === '[object Array]')) return obj;\n const o = type === '[object Object]' ? {} : [];\n if (weakMap.get(obj)) return o;\n weakMap.set(obj, true);\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n o[key] = deepClone(obj[key], weakMap);\n }\n }\n return o;\n}\n","introduce":"实现对象深拷贝, 修改深拷贝对象不影响原对象\n\n用例 1:\n\n```js\nconst userList = { user: [{ name: 'xjq' }] };\nconst cloneUserList = deepClone(userList);\n\nconsole.log(cloneUserList); // { user: [{ name: 'xjq' }] }\ncloneUserList.user.push({ name: 'xjq1' });\nconsole.log(cloneUserList.user); // [{ name:'xjq' }]\n```\n\n用例 2:\n\n```js\n\nconst user = { name: 'xjq', height: 180 };\nconst cloneUser = deepClone(user);\n\nconsole.log(user); // { name: 'xjq', height: 180 }\n\ndelete cloneUser.height;\nconsole.log(cloneUser); // { name: 'xjq' }\nconsole.log(user; // { name: 'xjq', height: 180 }\n```\n","desc":"实现对象深拷贝, 修改深拷贝对象不影响原对象","index":"/**\n * 深拷贝\n *\n * @param {(Array|Object)} obj\n * @return {(Array|Object)}\n */\nexport default function deepClone(obj) {\n return {};\n}\n","test":"import _deepClone from './answer.mjs';\nimport f from './index.mjs';\nimport { it } from 'mocha';\nimport { assert } from 'chai';\n\nit('一层对象: 输入 { f: 1 }', () => {\n assert.deepEqual(f({ f: 2 }), { f: 2 });\n});\n\nit('两层对象: 输入 { a: 1, b: { c: 3 } }', () => {\n assert.deepEqual(f({ a: 1, b: { c: 3 } }), { a: 1, b: { c: 3 } });\n});\n\nit('数组: 输入 [1, { a: 1 }]', () => {\n assert.deepEqual(f([1, { a: 1 }]), [1, { a: 1 }]);\n});\n\nit('修改拷贝对象属性, 原对象应不受影响', () => {\n const Input = { b: { c: 1, d: 2 } };\n const cloneObj = f(Input);\n cloneObj.b.c = 2;\n assert.deepEqual(Input, {\n b: { c: 1, d: 2 },\n });\n});\n\nit('循环引用', () => {\n const circle1 = { foo: 1 };\n const circle2 = { bar: 2, c1: circle1 };\n circle1.c2 = circle2;\n assert.deepEqual(f(circle1), { foo: 1, c2: { bar: 2, c1: {} } });\n});\n"},"deepMerge":{"answermd":"### 方法一\n\n递归处理\n\n```js\nfunction getType(o) {\n return Object.prototype.toString.call(o);\n}\n\nfunction deepClone(obj, weakMap = new WeakMap()) {\n const type = Object.prototype.toString.call(obj);\n if (!(type === '[object Object]' || type === '[object Array]')) return obj;\n const o = type === '[object Object]' ? {} : [];\n if (weakMap.get(obj)) return o;\n weakMap.set(obj, true);\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n o[key] = deepClone(obj[key], weakMap);\n }\n }\n return o;\n}\n\nexport default function deepMerge(a, b) {\n if (getType(a) !== '[object Object]' && getType(a) !== '[object Array]') {\n return deepClone(b);\n }\n\n const isArray = getType(a) === '[object Array]';\n const res = isArray ? [] : {};\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n res[key] = deepMerge(a[key], b[key]);\n }\n }\n for (const key in a) {\n if (res[key] === undefined && a.hasOwnProperty(key)) {\n res[key] = deepClone(a[key]);\n }\n }\n return res;\n}\n```\n","answer":"function getType(o) {\n return Object.prototype.toString.call(o);\n}\n\nfunction deepClone(obj, weakMap = new WeakMap()) {\n const type = Object.prototype.toString.call(obj);\n if (!(type === '[object Object]' || type === '[object Array]')) return obj;\n const o = type === '[object Object]' ? {} : [];\n if (weakMap.get(obj)) return o;\n weakMap.set(obj, true);\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n o[key] = deepClone(obj[key], weakMap);\n }\n }\n return o;\n}\n\nexport default function deepMerge(a, b) {\n if (getType(a) !== '[object Object]' && getType(a) !== '[object Array]') {\n return deepClone(b);\n }\n\n const isArray = getType(a) === '[object Array]';\n const res = isArray ? [] : {};\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n res[key] = deepMerge(a[key], b[key]);\n }\n }\n for (const key in a) {\n if (res[key] === undefined && a.hasOwnProperty(key)) {\n res[key] = deepClone(a[key]);\n }\n }\n return res;\n}\n","introduce":"对象合并\n\n深度合并两个对象, 并且修改新对象不会影响原对象, 相同的属性则以 b 对象为主\n\n用例 1:\n\n```js\nconst a = { a: 1 };\nconst b = { b: 2 };\n\ndeepMerge(a, b); // { a: 1, b: 2 }\n```\n\n用例 2:\n\n```js\nconst a = { foo: { bar: 0 }, arr: [1, 3, { a: { b: 1 } }] };\nconst b = { foo: { bar: 1 }, arr: [1, 2, { b: { a: 1 } }] };\n\ndeepMerge(a, b); // { foo: { bar: 1 }, arr: [1, 2, { a: { b: 1 }, b: { a: 1 } }] }\n```\n\n用例 3:\n\nb 属性值为 undefined 不会并入 a\n\n```js\nconst a = { a: 1 };\nconst b = { a: undefined };\n\ndeepMerge(a, b); // { a: 1 }\n```\n\n用例 4:\n\n```js\nconst a = { a: 1 };\nconst b = undefined;\n\ndeepMerge(a, b); // { a: 1 }\n```\n\n用例 5:\n\n```js\nconst a = undefined;\nconst b = { a: 1 };\n\ndeepMerge(a, b); // { a: 1 }\n```\n","desc":"对象合并","index":"/**\n * 对象合并\n *\n * @export\n * @param {Object} a\n * @param {Object} b\n * @return {Object}\n */\nexport default function deepMerge(a, b) {\n return {};\n}\n","test":"import f from './index.mjs';\nimport { it } from 'mocha';\nimport { assert } from 'chai';\n\nit('一层对象: 输入 { a: 1 }, { b: 2 }', () => {\n assert.deepEqual(f({ a: 1 }, { b: 2 }), { a: 1, b: 2 });\n});\n\nit('两层对象: 输入 { a: 1, b: { c: 2 } }, { b: 2 }', () => {\n assert.deepEqual(f({ a: 1, b: { c: 2 } }, { b: { c: 3, d: 4 } }), {\n a: 1,\n b: { c: 3, d: 4 },\n });\n});\n\nit(\"两层对象存在数组合并: 输入 { b: { c: [1, 3, { a: 1 }] } }, { b: { c: ['1', 2, { a: 2 }] } }\", () => {\n assert.deepEqual(\n f({ b: { c: [1, 3, { a: 1 }] } }, { b: { c: ['1', 2, { a: 2 }] } }),\n { b: { c: ['1', 2, { a: 2 }] } }\n );\n});\n\nit('b 中属性值为 undefined 时不会合并: 输入 { a: 1 }, { a: undefined }', () => {\n assert.deepEqual(f({ a: 1 }, { a: undefined }), { a: 1 });\n});\n\nit('边界输入一 undefined | null, { a: 1 }', () => {\n assert.deepEqual(f(undefined, { a: 1 }), { a: 1 });\n assert.deepEqual(f(null, { a: 1 }), { a: 1 });\n});\n\nit('边界输入二 { a: 1 }, undefined | null', () => {\n assert.deepEqual(f({ a: 1 }, undefined), { a: 1 });\n assert.deepEqual(f({ a: 1 }, null), { a: 1 });\n});\n"},"flatten":{"answermd":"### 方法一\n\n```js\nexport default function flatten(arr) {\n return arr.reduce((acc, cur) => {\n if (Array.isArray(cur)) {\n acc = acc.concat(flatten(cur));\n } else {\n acc.push(cur);\n }\n return acc;\n }, []);\n}\n```\n","answer":"export default function flatten(arr) {\n return arr.reduce((acc, cur) => {\n if (Array.isArray(cur)) {\n acc = acc.concat(flatten(cur));\n } else {\n acc.push(cur);\n }\n return acc;\n }, []);\n}\n","introduce":"实现数组扁平化方法\n\n用例 1:\n\n```js\nflatten([1, 2, 3]); // [1, 2, 3]\n```\n\n用例 2:\n\n```js\nflatten([1, [2, 3]]); // [1, 2, 3]\n```\n\n用例 3:\n\n```js\nflatten([1, [[2, 2], [3, [4]], 5]]); // [1, 2, 2, 3, 4, 5];\n```\n","desc":"实现数组扁平化方法","index":"/**\n * 数组扁平化\n *\n * @param {number[]} arr\n * @return {number[]}\n */\nexport default function flatten(arr) {\n return [];\n}\n","test":"import f from './index.mjs';\nimport { it } from 'mocha';\nimport { assert } from 'chai';\n\nit('一层数组: 输入 [1, 2, 3]', () => {\n assert.deepEqual(f([1, 2, 3]), [1, 2, 3]);\n});\n\nit('两层数组: 输入 [1, [2, 3]]', () => {\n assert.deepEqual(f([1, [2, 3]]), [1, 2, 3]);\n});\n\nit('四层数组: 输入 [1, [[2, 2], [3, [4]], 5]]', () => {\n assert.deepEqual(f([1, [[2, 2], [3, [4]], 5]]), [1, 2, 2, 3, 4, 5]);\n});\n"},"sort":{"answermd":"### 方法一\n\n原生 api sort 方法\n\n```js\nexport default function sort(arr) {\n // js api\n return arr.sort();\n}\n```\n","answer":"export default function f(arr) {\n // js api\n return arr.sort();\n}\n","introduce":"将数组按从小到大的顺序排序\n\n输入为 数字数组\n\n- 冒泡排序\n- 选择排序\n- 插入排序\n- 归并排序\n- 堆排序\n- 快速排序\n\n...\n\n用例 1:\n\n```js\nconst arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];\nconst sortArr = sort(arr);\n\nconsole.log(sortArr); // [1, 2, 3, 4, 5, 6, 7, 8, 9]\n```\n\n用例 2:\n\n```js\nconst arr = [1, 9, 2, 4, 3, 7, 6, 8, 6];\nconst sortArr = sort(arr);\n\nconsole.log(sortArr); // [1, 2, 3, 4, 5, 6, 7, 8, 9]\n```\n\n用例 3:\n\n```js\nconst arr = [1, 1, 1, 3, 4, 5, 7, 6, 6, 6, 0, 0, -1];\nconst sortArr = sort(arr);\n\nconsole.log(sortArr); // [-1, 0, 0, 1, 1, 1, 3, 4, 5, 6, 6, 6, 7]\n```\n","desc":"将数组按从小到大的顺序排序","index":"/**\n * 排序函数\n *\n * @export\n * @param {number[]} arr\n * @return {number[]}\n */\nexport default function sort(arr) {\n return [];\n}\n","test":"import f from './index.mjs';\nimport { it } from 'mocha';\nimport { assert } from 'chai';\n\nit('空数组: 输入 []', () => {\n assert.deepEqual(f([]), []);\n});\n\nit('已排序好的数组: 输入 [1, 2, 3, 4, 5, 6, 7, 8, 9]', () => {\n assert.deepEqual(f([1, 2, 3, 4, 5, 6, 7, 8, 9]), [1, 2, 3, 4, 5, 6, 7, 8, 9]);\n});\n\nit('乱序数组一: 输入 [1, 9, 2, 4, 3, 7, 6, 8, 5]', () => {\n assert.deepEqual(f([1, 9, 2, 4, 3, 7, 6, 8, 5]), [1, 2, 3, 4, 5, 6, 7, 8, 9]);\n});\n\nit('乱序数组二-包含负数: 输入 [1, 1, 1, 3, 4, 5, 7, 6, 6, 6, 0, 0, -1]', () => {\n assert.deepEqual(\n f([1, 1, 1, 3, 4, 5, 7, 6, 6, 6, 0, 0, -1]),\n [-1, 0, 0, 1, 1, 1, 3, 4, 5, 6, 6, 6, 7]\n );\n});\n"},"unique":{"answermd":"### 方法一\n\n利用 set 去除\n\n```js\nexport default function unique(arr) {\n return [...new Set(arr)];\n}\n```\n","answer":"export default function unique(arr) {\n return [...new Set(arr)];\n}\n","introduce":"数组去重\n\n用例 1:\n\n```js\nconst arr = [1, 2, 3];\nconst uniqueArr = unique(arr1);\n\nconsole.log(uniqueArr); // [1, 2, 3]\n```\n\n用例 2:\n\n```js\nconst arr = [1, 2, 3, 3, 3];\nconst uniqueArr = unique(arr);\n\nconsole.log(uniqueArr); // [1, 2, 3]\n```\n","desc":"数组去重","index":"/**\n * 数组去重\n *\n * @export\n * @param {number[]} arr\n * @return {number[]}\n */\nexport default function unique(arr) {\n return [];\n}\n","test":"import f from './index.mjs';\nimport { it } from 'mocha';\nimport { assert } from 'chai';\n\nit('无重复数字: 输入 [1, 2, 3]', () => {\n assert.deepEqual(f([1, 2, 3]), [1, 2, 3]);\n});\n\nit('单个重复数字: 输入 [1, 2, 3, 3]', () => {\n assert.deepEqual(f([1, 2, 3, 3]), [1, 2, 3]);\n});\n\nit('多个重复数字: 输入 [1, 1, 2, 2, 2, 3, 3]', () => {\n assert.deepEqual(f([1, 1, 2, 2, 2, 3, 3]), [1, 2, 3]);\n});\n"}} \ No newline at end of file diff --git a/server/src/service/question.ts b/server/src/service/question.ts index 18c9fcc..b7063c2 100644 --- a/server/src/service/question.ts +++ b/server/src/service/question.ts @@ -102,7 +102,6 @@ export class QuestionService { @CatchError() async getQuestion({ name }: { name: string }): Promise> { const data = await prisma.question.findUnique({ where: { name } }); - console.log(data); if (!data) return { code: 1, message: '未查到记录!' }; return { code: 0, data }; @@ -141,11 +140,9 @@ export class QuestionService { @CatchError() async updateQuestion(body: Partial): Promise> { const name = body.name; - console.log(this); if (!name) return { code: 1, message: '未查到记录!' }; const prev = await this.getQuestion({ name }); - console.log(prev); const data = await prisma.question.update({ where: { name },