但我也想把约拿的答案留在这里。只要让我知道,如果我真的要结束这个或堆叠溢出的问题。
我真的不喜欢把很多ifs粘在一起。我觉得这看起来像个堆叠的孩子。但是,如果有人知道如何使用这段代码做同样的事情,但是代码行少了,那就太好了。
var time = data[i].data4;
var summary = '<td>' + time + ' minutes since last login.</td></tr>';
if(time >= 60) {
var hour= tiempo / 60;
summary = '<td>' + Math.floor(hora) + ' hours since last login.</td></tr>';
if(hour>= 24) {
var day = hour/ 24;
summary= '<td>' + Math.floor(day) + ' days since last login.</td></tr>';
if(dia >= 7) {
var week= day / 7;
summary = '<td>' + Math.floor(week) + ' weeks since last login.</td></tr>';
if(week >= 4) {
var month = week / 4;
summary = '<td>' + Math.floor(mes) + ' months since last login.</td></tr>';
}
}
}
s += summary;
} else {
s += summary;
}对于某些上下文:data[i].data4来自DATEDIFF(mi, someDate, getdate())的一个操作列。
正如您所看到的,返回的结果将在几分钟内完成,从那时起,我开始检查每一行的时间、天数等等,我甚至愿意在每一行之间加上an (如果大于1),所以我可以将措辞改为单数,而不是复数,但我认为这行太多了,我决定是否只写“分钟”而不是“分钟”。
发布于 2016-07-21 06:41:02
这里有一个没有任何ifS的重写:
function humanTime(minutes) {
var units = ['months' , 'weeks' , 'days' , 'hours'];
var minutesPerUnit = [40320 , 10080 , 1440 , 60];
var timeInUnits = minutesPerUnit.map(x => Math.floor(minutes / x));
var time = timeInUnits.find(x => x > 0);
var unit = units[timeInUnits.indexOf(time)];
return time + ' ' + unit;
}注意,我从这段代码中删除了<td>s,因为它主要是一个视图(格式化)关注点。这使得这个函数保持更有针对性:它只需几分钟,并酌情将其转换为小时/天/周/月。
您还可以考虑返回表单的一个对象:{time: 6, unit: 'days'},而不是我所拥有的字符串,以使数据和视图的分离更加强大。
https://codereview.stackexchange.com/questions/135436
复制相似问题