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;
中稍后将它们相互子化?为什么然后再次平等他们呢?
答案 0 :(得分:0)
循环的每次迭代都记录了每行数据之间的天数差异。但是对于索引0,没有&#34;之前的&#34;要比较的元素。当它说&#34; if(!lastValue)&#34;这意味着,&#34;如果最后一个值等于0&#34;。然后它将减去值 - 值,并以天为单位记录该差异。
答案 1 :(得分:0)
变量lastValue
开始单元化,默认情况下等于undefined
。如果lastValue
未定义,则输出days
的第一个元素将具有值NaN
,因为(value - undefined)
的输出将不可避免地无法估算。
此函数似乎返回每个“M-D”以及值减去前一天的值。重复的日子被忽略了:
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 }
*/
答案 2 :(得分:0)
当循环开始迭代时,它会检查变量是否等于某个值?如果lastvalue
设置为空,它等于lastvalue
到value
,或者如果lastvalue
有某个值,则第一个if
语句不会执行任何操作。