我有季度名单。
var quarters = new Array();
quarters.push("Q1 2014");
quarters.push("Q2 2014");
quarters.push("Q4 2014");
quarters.push("Q1 2015");
这里的季度不是顺序的。 " 2014年第3季度"不见了。 如何使用jquery检查这些是否顺序?
答案 0 :(得分:1)
对数组进行排序(您需要一个回调比较函数来传递给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;
}
答案 1 :(得分:-1)
以下代码将首先对列表进行排序,然后标记打破序列的任何缺失的季度。但是,它不会标记不打破序列的缺失区域,例如Q3
/ Q4
不会被标记为2015年失踪
var quarters = new Array();
quarters.push("Q1 2014");
quarters.push("Q2 2015");
quarters.push("Q1 2016");
quarters.push("Q4 2014");
quarters.push("Q2 2014");
quarters.push("Q1 2015");
// sort list before sequence check
quarters.sort(function(a, b) {
a = strToQtr(a);
b = strToQtr(b);
return a.year === b.year ? a.qtr - b.qtr : a.year - b.year;
});
// check sequence order of each quarter, flag if sequence is broken
var prev;
for (var i = 0; i < quarters.length; i++) {
var cur = strToQtr(quarters[i]);
if (prev && prev.year === cur.year && (cur.qtr - 1) !== prev.qtr) {
console.log('Q' + (cur.qtr - 1) + ' ' + cur.year + ' is missing!');
}
console.log(quarters[i]);
prev = cur;
}
// string parser
function strToQtr(value) {
var parts = value.split(' ');
return {
qtr: parseInt(parts[0].replace('Q', '')),
year: parseInt(parts[1])
};
};