Javascript如何扩展数组,防止未定义的错误

时间:2014-07-25 14:10:13

标签: javascript arrays mongodb meteor

我目前正在meteor中创建一个测验应用。我使用的一个关键变量叫做currentQuestions,它跟踪用户所进行的每个测验的问号。它是当前每次用户单击特定测验上的下一个或后退按钮时更新(在Meteor会话中)的阵列。例如:

   currentQuestion = Session.get('currentQuestion') || [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

这适用于少量测验。但是当我想进行大量的测验时,你会建议什么?目前,当我创建比之前在currenQuestion数组中定义的更多测验时,应用程序崩溃了。

我想到的可能的解决方案

  1. (丑陋的解决方案)创建一个for循环,在启动时填充大量零的currentQuestion数组。

  2. 将一个对象插入到mongoDB数据库中,该数据库包含当前问题,其中包含所采用的测验的id(因此完全摆脱了数组)

  3. 希望你能提供帮助。

2 个答案:

答案 0 :(得分:0)

你需要完全摆脱阵列。如果你要在会话之间进行跟踪,那么你需要使用像mongoDB这样的东西。你可以创建类似于进度或完成模型的东西,它可以保存有关它们所采取的测验以及每个测验的进度的信息。一旦你通过一些userId相关密钥存储它们。

你的肮脏解决方案并不是最差的,因为你会在开始时知道你将拥有多少个测验,然后可以分配数组。

答案 1 :(得分:0)

选项2绝对是正确的选择:

如果您不需要跟踪会话之间的分数,您可以只使用客户端数据库并按照您的建议存储对象,而且只需要几行新代码灵活的结果。

这也很容易转换为持久性存储:要么使用Meteor的帐户包添加登录,要将当前userId添加到每个测验对象,然后只发布测验对象与登录用户相同userId。或者,如果您想要完全避免用户登录,您甚至可以使用放大包在给定浏览器中的会话之间存储结果(您必须在启动时再次拉出现有结果,但这很容易)。

结果将具有内置的Session变量的所有反应性,并且将避免使用任意且不断变化的零数填充数组 - 只需检查具有给定测验ID的文档是否在集合中或不,如果没有,那么创建它。