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

Create function that calculates an objects state depending on time parameter

本文关键字:对象 状态 函数 计算 参数 时间 创建      更新时间:2023-09-26

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

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;
}

另请注意,如果票证不必转到所有州,例如在上面的示例中,票证尚未进入建议的状态。

请注意,票证对象也可能如下所示。

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;
}

现在,如果您的对象不仅包含状态,还包含其他属性(不保存日期),则需要匹配类似日期的属性值:

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

或者创建一组所有可能的状态并迭代它而不是对象的属性名称:

 …
 var allStates = ["opened", "assiged", "resolved", "proposed", "closed"];
 for (var i=0; i<allStates.length; i++) {
     var s = allStates[i];
     …

如果你有很多可能的状态,并且它们只能以一个顺序运行,你也可以在该状态列表中使用二叉搜索。