Javascript 创建根据时间参数计算对象状态的函数

Javascript 创建根据时间参数计算对象状态的函数,javascript,Javascript,假设我有一个看起来像的对象: var ticket = { state:"Closed", opened:"2014-01-12", assiged:"2014-02-03", resolved:"2014-04-22", propose:"", closed:"2014-05-03" tmpstateholder:"" }; 我想要的是一个函数,它以2014-02-25 计算票证在该日期处于何种状态,然后返回该对象 funct

假设我有一个看起来像的对象:

var ticket = {
    state:"Closed", 
    opened:"2014-01-12",
    assiged:"2014-02-03",
    resolved:"2014-04-22",
    propose:"",
    closed:"2014-05-03"
    tmpstateholder:""
    };
我想要的是一个函数,它以2014-02-25

计算票证在该日期处于何种状态,然后返回该对象

function calculateState(d,datestring){
    //Calculate in what state the object is in depending on the date string
    //For example in this case when datestring = 2014-02-25 it should return;
    d.tmpstateholder="assiged"
    return d;
}
还要注意,如果票据不必去所有州,例如在上面的示例中,票据没有进入提议的州

注意,ticket对象也可以如下所示

var ticket = {
    state:"Closed", 
    opened:"2014-01-12",
    assiged:"",
    resolved:"",
    propose:"",
    closed:"2014-05-03",
    tmpstateholder:""
    };

您可以简单地枚举对象,过滤掉那些日期在我们要查找的时间之后的状态,然后取其余状态的最大值:

function calculateState(d, datestring) {
    var maxdate = "", state = "";
    for (var s in d)
        if (d[s] <= datestring && d[s] > maxdate) {
            maxdate = d[s];
            state = s;
        }
    return state;
}
函数calculateState(d,日期字符串){
var maxdate=“”,state=“”;
用于(d中的变量s)
如果(d[s]maxdate){
maxdate=d[s];
状态=s;
}
返回状态;
}
现在,如果对象不仅包含状态,还包含其他属性(不包含日期),则需要匹配类似日期的属性值:

 …
       if (/^\d{4}-\d{2}-\d{2}/.test(d[s]) && d[s] <= …

if(/^\d{4}-\d{2}-\d{2}/.test(d[s])&&d[s]仅使用
javascript
?使用
foreach
jqueryy您的逻辑似乎是错误的。记录不同的状态并没有问题,但如果只有一个活动状态,我认为它应该存储在您的数据中,而不是动态计算。在这种情况下,我想使用javascript,因为它需要大量的检查t需要做,这就是为什么我要避免jQuery。=)我也知道它似乎是错的,但这就是任务的样子,我想对大量票证的历史进行计算,要做到这一点,我需要知道票证在给定时间处于哪个状态=)。
 …
 var allStates = ["opened", "assiged", "resolved", "proposed", "closed"];
 for (var i=0; i<allStates.length; i++) {
     var s = allStates[i];
     …