function statsForDays(data) {
var days = {};
var currentDate;
var lastValue;
for (var i=0, l=data.length; i<l; i++) {
var element = data[i];
var timestamp = element[0];
var value = element[1];
var date = new Date(timestamp);
if (!lastValue) lastValue = value;
if (currentDate != date.getDate()) {
currentDate = date.getDate();
days[String(date.getMonth()+1)+'-'+String(currentDate)] = value - lastValue;
lastValue = value;
}
}
return days;
}有人能向我解释一下上面的功能是如何工作的吗?我知道它是如何产生的,但是我想知道if (!lastValue) lastValue = value;在函数中做了什么?这似乎是一种算法,但它是如何工作的呢?既然lastvalue被设置为等于value,那么为什么以后在days[String(date.getMonth()+1)+'-'+String(currentDate)] = value - lastValue;中将它们相互替换呢?那为什么还要和他们一样呢?
发布于 2015-09-17 11:53:52
当循环开始迭代时,它检查变量是否等于某个值?如果lastvalue设置为nothing,则它等于lastvalue为value,或者如果lastvalue具有某些值,则第一个if语句不会执行任何操作。
发布于 2015-06-24 16:35:22
循环的每一次迭代都记录每一行数据之间的天数差异。但是,对于索引0,没有“以前”元素可与之比较。当它说"if (!lastValue)“时,意思是”如果最后一个值等于0“。然后,它将减去值-值,并在几天内记录该差值的0。
发布于 2015-06-24 16:37:47
变量lastValue开始统一,默认情况下等于undefined。如果lastValue仍未定义,则输出days的第一个元素将具有NaN值,因为(value - undefined)的输出不可避免地无法计算。
这个函数似乎返回每个“M”值以及减去前一天值的值。不考虑重复的日子:
statsForDays([
[new Date(2015,0,1),3],
[new Date(2015,1,2), 4],
[new Date(2015,2,3), 11],
[new Date(2015,3,5), 5],
[new Date(2015,3,5), 5] ]
)
/*
Returns:
Object { 1-1=0, 2-2=1, 3-3=7, 4-5=-6 }
*/https://stackoverflow.com/questions/31031581
复制相似问题