我有一个DB包含数学练习,按难度级别和日期分割.
我想生成一段时间的性能图表.
为了达到这个目的,我遍历查询结果,以及++进行练习的级别和日期的计数器.
例如:2级练习于2015年11月1日进行.
this.levels[2].daysAgo[1].amountTaken++;
有了这个,我可以构建一个图表,其中第0天始终是今天,并且显示了几天的表现.
现在levels []有一个预定义的级别,所以没有问题.但DAYSAGO []是非常动态的(它甚至使用相同的数据每天都在变化),所以如果只有一个运动拍摄,它会徘徊每天的基础上(从是daysAgo[0]对daysAgo[1]等).在daysAgo[]这之间是空的(因为没有条目).
但是为了评估图表,我需要它们具有初始化状态amountTaken: 0,等等.
问题是:我不知道什么时候最古老的运动.
首先收集一种代理对象中的所有条目,其中我有一个var maxDaysAgo保存最旧练习的值,然后daysAgo[maxDaysAgo]在插入实际条目之前初始化一个填充0条目的数组.
这看起来非常笨拙而且过于复杂
只需添加条目this.level[level].daysAgo[daysAgo].amountTaken++;,可能会使daysAgo数组中包含许多undefined键.然后,在添加所有条目之后,我将循环遍历daysAgo键
for (var i = 1; i < this.maxLevel; i++) { // for every level
for (var j = 0; j < this.levels[i].daysAgo.length; j++) {
Run Code Online (Sandbox Code Playgroud)
但daysAgo.length不会计算未定义的字段,是吗?
所以,如果我在[24]只有一个条目,length仍然是1:/
我怎样才能找到数组中的最高键并循环,直到那里存在未定义的键?我怎样才能将所有未定义的密钥添加到最高位置(而不是更多)?
或者:完全解决整个问题会有什么不同,更优雅的方式?
谢谢 :)
array.length返回一个高于最高数字索引的值,因此可用于循环甚至未定义的值
作为测试:
var a=[]
a[24]=1
console.log(a.length)
Run Code Online (Sandbox Code Playgroud)
为我输出25(在chrome和firefox中).
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |