gpt4 book ai didi

javascript - 如何降低这个函数的圈复杂度?

转载 作者:行者123 更新时间:2023-11-28 17:38:42 31 4
gpt4 key购买 nike

我有一个函数,它采用纪元中的时间戳(例如1517073001),并以简单的格式(例如“2小时前”)返回自那时以来耗时(而不是像“2”这样的更详细的格式)小时 31 分 15 秒前”)。

该函数按预期工作,但 JSHint 提示使用了太多语句 (30) 并且其圈复杂度太高 (12)。我想知道有什么方法可以改善这两个方面。

这是函数:

function msToTime(epoch) {
var previous = new Date(epoch * 1000);
var current = Math.floor(new Date().getTime());
var ms = current - previous;
var years = parseInt((ms / (1000 * 60 * 60 * 24 * 30 * 12)).toFixed(20), 10);
var months = parseInt((ms / (1000 * 60 * 60 * 24 * 30) % 12).toFixed(20), 10);
var days = parseInt((ms / (1000 * 60 * 60 * 24) % 30).toFixed(20), 10);
var hours = parseInt((ms / (1000 * 60 * 60) % 24).toFixed(20), 10);
var minutes = parseInt(ms / (1000 * 60) % 60, 10);
var seconds = parseInt(ms / 1000 % 60, 10);
var formatted = '';

if (years > 0) {
if (years > 1) {
formatted = years + ' years ago';
} else {
formatted = years + ' year ago';
}
} else if (months > 0) {
if (months > 1) {
formatted = months + ' months ago';
} else {
formatted = months + ' month ago';
}
} else if (days > 0) {
if (days > 1) {
formatted = days + ' days ago';
} else {
formatted = days + ' day ago';
}
} else if (hours > 0) {
if (hours > 1) {
formatted = hours + ' hours ago';
} else {
formatted = hours + ' hour ago';
}
} else if (minutes > 0) {
if (minutes > 1) {
formatted = minutes + ' minutes ago';
} else {
formatted = minutes + ' minute ago';
}
} else {
if (seconds > 1) {
formatted = seconds + ' seconds ago';
} else {
formatted = seconds + ' second ago';
}
}

return formatted;
}

var div = document.getElementById('time');
div.innerHTML = msToTime(1517073001);
<div id="time"></div>

提前谢谢您。 :)

最佳答案

另一个针对 div 和模块操作进行优化的版本

function msToTime(epoch) {
var value = (Math.floor(new Date().getTime()) - new Date(epoch * 1000)) / 1000;

var time_factors = [['second', 60], ['minute', 60], ['hour', 24], ['day', 30], ['month', 12], ['year', NaN]];

for (factor of time_factors) {

if (value < factor[1] || isNaN(factor[1])) {
var t = Math.floor(value);
return t + ' ' + (t > 1 ? factor[0] + 's' : factor[0]) + ' ago';
}
value /= factor[1];
}
}

关于javascript - 如何降低这个函数的圈复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48479286/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com