使用jQuery检查四分之一是否按顺序排列



我有季度列表。

var quarters = new Array();
quarters.push("Q1 2014");
quarters.push("Q2 2014");
quarters.push("Q4 2014");
quarters.push("Q1 2015");

这里的四分之一没有顺序。"2014年第三季度"不见了。如何检查这些是否在顺序或不使用jquery?

  1. 排序数组(你需要一个回调比较函数传递给sort)

  2. 循环遍历数组,比较"当前"条目与前一个条目,查看它是否正好是四分之一之后

在这两种情况下,你可能需要一些东西来解析字符串,这样你就有一个四分之一的数字和一个年份,而不是一个组合它们的字符串。解析非常简单,您可以使用正则表达式进行解析:

var parts = str.match(/^Q(d) (d{4})$/);

parts[1]为季度,parts[2]为年份。

我通常不喜欢提供所有的代码,但现在有不正确的代码围绕这个问题:

var quarters = [
    "Q1 2014",
    "Q2 2014",
    "Q4 2014",
    "Q1 2015"
];
var prev, i, curr;
// Sort the quarters according to their quarter value (see `qval` below)
quarters.sort(function(a, b) {
    return qval(a) - qval(b);
});
// Find gaps by starting at the beginning and comparing each entry
// to the one just in front of it
prev = qval(quarters[0]);
for (i = 1; i < quarters.length; ++i) {
    curr = qval(quarters[i]);
    if (curr !== prev + 1) {
        console.log("Gap found between " + quarters[i - 1] + " and " + quarters[i]);
    }
    prev = curr;
}
// `qval` parses a quarter string ("Q2 2014", for instance) and returns a
// a number for the quarter: The year times four plus the quarter
// within the year (e.g., 8058 for Q2 2014). For easy comparison.    
function qval(quarterString) {
    var qv, parts;
    parts = quarterString.match(/^Q(d) (d{4})$/);
    if (!parts) {
        throw "Invalid quarter string: '" + quarterString + "'";
    }
    qv = (parseInt(parts[2]) * 4) + parseInt(parts[1]);
    return qv;
}

生活复制

最新更新