通过阅读文本部分来跟踪用户进度的最佳方法
Best method to keep track of a users progression through reading sections of text
与zyBooks类似,如果您熟悉它,我想跟踪用户已阅读并通过按钮检查完成的部分。
但是,从概念上讲,除了包含每个部分和 bool 值的对象或对象数组之外,我无法考虑在我的 mongo 数据库中存储什么来跟踪它们的进度。一个部分将有大约 10 个小节。但是总共会有大约 8 个部分。所以总共要跟踪 80 个小节。
这就是我的想法,但似乎效率低下。
const sectionArray = [
{
section: "1",
completed: false,
subsections: [
{
name: "1.1",
completed: false,
},
{
name: "1.2",
completed: false,
},
{
name: "1.3",
completed: false,
},
],
},
{
section: "2",
completed: false,
subsections: [
{
name: "2.1",
completed: false,
},
{
name: "2.2",
completed: false,
},
{
name: "2.3",
completed: false,
},
],
},
...
];
我还将根据用户决定使用 React 和 material ui.
来显示一个部分及其子部分的内容
如果有更好的选择,我不想采用我的方法。
我认为您的方法完全适用于该数据量。
问题是,“低效”是什么意思?
从性能的角度来看,80个元素完全没问题。也许您只是对处理该代码感觉不舒服(这是一个正当理由)。
另一种选择是:
const sectionArray = [
{ section: "1", completed: false },
{ section: "1.1", completed: false },
{ section: "1.2", completed: false },
]
或(更快地访问这些部分,例如没有 .find()
):
const sectionCollection = {
"1": false,
"1.1": false,
"1.2": false,
]
也许你不需要存储主要部分,如果它们在所有子部分完成时隐式完成?
const sectionCollection = {
"1.1": false, // "1" is implicitly done if all "1.x" are done
"1.2": false,
]
可能不是一个合适的替代方案(如果大多数项目可能总是 false
会更有效):
const sectionArray = [ "1", "1.3", "3.2" ] // 1, 1.3, 3.2 are 'true', all others are 'false'
只是为了好玩:您也可以使用整数作为部分 ID(这在错误的一端可笑地过度优化):
const sectionCollection = [ 100, 103, 302 ] // list of integers
const sectionCollection = [ 0x10, 0x13, 0x32 ] // using hex or bin
const sectionCollection = { [100]: false, [101]: true } // integer keys
然后甚至存储一个字节数组而不是 JSON。
与zyBooks类似,如果您熟悉它,我想跟踪用户已阅读并通过按钮检查完成的部分。
但是,从概念上讲,除了包含每个部分和 bool 值的对象或对象数组之外,我无法考虑在我的 mongo 数据库中存储什么来跟踪它们的进度。一个部分将有大约 10 个小节。但是总共会有大约 8 个部分。所以总共要跟踪 80 个小节。
这就是我的想法,但似乎效率低下。
const sectionArray = [
{
section: "1",
completed: false,
subsections: [
{
name: "1.1",
completed: false,
},
{
name: "1.2",
completed: false,
},
{
name: "1.3",
completed: false,
},
],
},
{
section: "2",
completed: false,
subsections: [
{
name: "2.1",
completed: false,
},
{
name: "2.2",
completed: false,
},
{
name: "2.3",
completed: false,
},
],
},
...
];
我还将根据用户决定使用 React 和 material ui.
来显示一个部分及其子部分的内容如果有更好的选择,我不想采用我的方法。
我认为您的方法完全适用于该数据量。
问题是,“低效”是什么意思?
从性能的角度来看,80个元素完全没问题。也许您只是对处理该代码感觉不舒服(这是一个正当理由)。
另一种选择是:
const sectionArray = [
{ section: "1", completed: false },
{ section: "1.1", completed: false },
{ section: "1.2", completed: false },
]
或(更快地访问这些部分,例如没有 .find()
):
const sectionCollection = {
"1": false,
"1.1": false,
"1.2": false,
]
也许你不需要存储主要部分,如果它们在所有子部分完成时隐式完成?
const sectionCollection = {
"1.1": false, // "1" is implicitly done if all "1.x" are done
"1.2": false,
]
可能不是一个合适的替代方案(如果大多数项目可能总是 false
会更有效):
const sectionArray = [ "1", "1.3", "3.2" ] // 1, 1.3, 3.2 are 'true', all others are 'false'
只是为了好玩:您也可以使用整数作为部分 ID(这在错误的一端可笑地过度优化):
const sectionCollection = [ 100, 103, 302 ] // list of integers
const sectionCollection = [ 0x10, 0x13, 0x32 ] // using hex or bin
const sectionCollection = { [100]: false, [101]: true } // integer keys
然后甚至存储一个字节数组而不是 JSON。