当我尝试过滤数组时间中的时间时遇到麻烦,我有这样的代码;
var timeNow = "07";
var timeShift = ["08","10","12","14","16","18","20","22","00","02","04","06"];
var newData =[];
for(var data of timeShift){
if(data >= timeNow){
newData.push(data);
}
}
console.log(newData[0]); // output 08
问题输出与我的期望不同。
我想要
如果 timeNow 为08, timeShift 输出(选定)为08,
如果 timeNow 为07, timeShift 输出(选定)为06,
如果 timeNow 为09,则 timeShift 输出(选定)为08,
如果 timeNow 为23,则 timeShift 输出(选定)为22,
。 。 。 。 。 。 。像我期望的那样,继续使用数据 timeNow 和 timeShift 的结构。
我该如何解决该问题?
请帮帮我。
谢谢:)
答案 0 :(得分:1)
您可以通过将numericak值用于比较,将值减1进行检查来过滤值。
const getN = s => parseInt(s, 10),
check = (strong, weak) => strong === weak -1 || strong === weak;
var timeNow = "07",
timeShift = ["08","10","12","14","16","18","20","22","00","02","04","06"],
result = timeShift.filter(s => check(getN(s), getN(timeNow)));
console.log(result);
答案 1 :(得分:1)
看起来您想要的最大值小于或等于现在。您可以结合使用def slope_intercept (x_val, y_val):
x = np.array(x_val)
y = np.array(y_val)
m = ( ( ( np.mean(x)*np.mean(y))- np.mean(x*y)) / ((np.mean(x)*np.mean(x))- np.mean(x*x)))
m = round(m,2)
b = (np.mean(y) - np.mean(x)*m)
b = round(b,2)
return m,b
(首先过滤来自filter
的值小于或等于目标的值)和timeShift
(查找那些过滤值的最大值)的组合来完成此操作:
reduce
答案 2 :(得分:1)
一种实现方法是,一旦有了newData数组,就可以在该数组中找到最接近'timeNow'变量的数字。这可能效率不高,但应该为您提供所需的输出。 添加以下内容可以解决问题:
var closest = newData.reduce(function(prev, curr) {
return (Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);
});
console.log(closest);
答案 3 :(得分:1)
如果您需要查找小于或等于给定值的最接近的单个值,则只需对代码进行少量更新:
function getTime(timeNow) {
var timeShift = ["08", "10", "12", "14", "16", "18", "20", "22", "00", "02", "04", "06"];
var newTime = '00';
for (var data of timeShift)
if (data <= timeNow && data >= newTime)
newTime = data;
return newTime;
}
console.log(getTime('08'));
console.log(getTime('07'));
console.log(getTime('09'));
console.log(getTime('23'));