javascript - 查找最接近给定 24 小时时间的时间
问题描述
给定函数签名:
getNearestToDesiredTime(left, middle, right, desiredTime)
在哪里:
left, middle, right
是可能有效的 24 小时时间 (1830, -1, 1900
)desiredTime
是所需的 24 小时时间 (1845
)
您如何找到最接近所需时间的时间?
在时间参数都与所需时间等距的情况下,应返回较晚的时间。(在上面的示例中,1900
应该返回,因为1900
和1830
都15
距所需的分钟数1845
)。
这是我到目前为止所拥有的,但它似乎不太奏效。
const timeDiffInMinutes = (t1, t2) => {
const t1Mins = t1 / 100 * 60 + t1 % 100;
const t2Mins = t2 / 100 * 60 + t2 % 100;
return t2Mins - t1Mins;
};
const getNearestToDesiredTime = (left, middle, right, desiredTime) => {
if (middle !== -1) {
return middle;
} else if (left === -1 && right === -1) {
return null;
}
// result should be whatever time is _closest_ to the desiredTime.
// if both options are equi-distant to the desired time, show the later time.
const leftIsCloser =
timeDiffInMinutes(desiredTime, left) <
timeDiffInMinutes(desiredTime, right);
return leftIsCloser ? left : right;
};
测试用例:
// this should be 1900
console.log(getNearestToDesiredTime(1830, 1900, 1945, 1900))
// this should be 1915
console.log(getNearestToDesiredTime(1830, 1915, 1945, 1900))
// this should be 1830
console.log(getNearestToDesiredTime(1830, -1, 1945, 1845))
// this should be 1945
console.log(getNearestToDesiredTime(1830, -1, 1945, 1930))
// this should be 1900
console.log(getNearestToDesiredTime(1830, -1, 1900, 1845))
解决方案
稍微改变它以处理更通用的时间数组。我们跟踪最佳差异,然后返回造成差异的时间
// this should be 1900
console.log(getNearestToDesiredTime([1830, 1900, 1945], 1900))
// this should be 1915
console.log(getNearestToDesiredTime([1830, 1915, 1945], 1900))
// this should be 1830
console.log(getNearestToDesiredTime([1830, 1945], 1845))
// this should be 1945
console.log(getNearestToDesiredTime([1830, 1945], 1930))
// this should be 1900
console.log(getNearestToDesiredTime([1830, 1900], 1845))
function timeDiffInMinutes (t1, t2) {
const t1Mins = Math.floor(t1 / 100) * 60 + t1 % 100;
const t2Mins = Math.floor(t2 / 100) * 60 + t2 % 100;
return t2Mins - t1Mins;
};
function getNearestToDesiredTime (times, target) {
var best = Infinity;
var bestIndex = -1;
for (var i = 0; i < times.length; i++) {
var difference = Math.abs(timeDiffInMinutes(times[i], target));
if (difference <= best) {
best = difference;
bestIndex = i;
}
}
return times[bestIndex];
}
推荐阅读
- jquery - 根据 currentdate 在 flatpicker 上更改 mintime
- intellij-idea - Intellij 修复检测到的警告 - svn:警告:W155010
- swift - Swift / Apple 登录 - HASH256 类型没有成员哈希
- c++ - 警告:算术中使用的“void *”类型指针 [-Wpointer-arith]|
- django - 将现有 API 添加到 django rest 框架中
- vaadin - Vaadin 图表:列堆栈图中的每个 X-Tick 上均未显示第二个和后续项目
- swagger - 使用 swagger 运行 Web API 核心的集成测试时出错
- javascript - 填写角度中的所有字段后如何启用提交按钮
- .net-core - Visual Studio 总是恢复,因为 Direct.Build.props
- blueprism - 触发窗口 以其他用户身份登录远程计算机