我有季度列表。
var quarters = new Array();
quarters.push("Q1 2014");
quarters.push("Q2 2014");
quarters.push("Q4 2014");
quarters.push("Q1 2015");
这里的四分之一没有顺序。"2014年第三季度"不见了。如何检查这些是否在顺序或不使用jquery?
-
排序数组(你需要一个回调比较函数传递给
sort
) -
循环遍历数组,比较"当前"条目与前一个条目,查看它是否正好是四分之一之后
在这两种情况下,你可能需要一些东西来解析字符串,这样你就有一个四分之一的数字和一个年份,而不是一个组合它们的字符串。解析非常简单,您可以使用正则表达式进行解析:
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;
}
生活复制