使用if NOT语句

时间:2015-06-24 16:07:22

标签: javascript

    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;中稍后将它们相互子化?为什么然后再次平等他们呢?

3 个答案:

答案 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设置为空,它等于lastvaluevalue,或者如果lastvalue有某个值,则第一个if语句不会执行任何操作。