现在在数组时间和时间范围内过滤数组javascript

时间:2018-10-24 17:42:27

标签: javascript arrays angular time filter

当我尝试过滤数组时间中的时间时遇到麻烦,我有这样的代码;

  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 的结构。

我该如何解决该问题?
请帮帮我。 谢谢:)

4 个答案:

答案 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'));