Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数组中查找上一个对象_Javascript_Arrays - Fatal编程技术网

Javascript 在数组中查找上一个对象

Javascript 在数组中查找上一个对象,javascript,arrays,Javascript,Arrays,如果我想在这个(假定已排序)数组中找到一个正好在用户日期之前的日期,我该如何做?所以在这种情况下,我想返回11/5/2017 基本上,就是在数组中指定日期左侧查找下一个最近的对象。更进一步说,如果我想再次检查前一个元素是什么,但又想避免重复,那会很有帮助 使用起来相当简单 var-arr=[“2017年10月27日”、“2017年11月5日”、“2017年11月10日”、“2017年11月10日”、“2017年12月”]; var userDate=“11/10/2017”; var prev

如果我想在这个(假定已排序)数组中找到一个正好在用户日期之前的日期,我该如何做?所以在这种情况下,我想返回
11/5/2017

基本上,就是在数组中指定日期左侧查找下一个最近的对象。更进一步说,如果我想再次检查前一个元素是什么,但又想避免重复,那会很有帮助

使用起来相当简单

var-arr=[“2017年10月27日”、“2017年11月5日”、“2017年11月10日”、“2017年11月10日”、“2017年12月”];
var userDate=“11/10/2017”;
var prev=arr.indexOf(userDate);//一次呼叫indexOf-DRY
console.log(
prev>0?//第一个(=0)和未找到(=1)
arr[prev-1]:“没有更早的日期”
);您可以使用

不要忘了检查元素是否存在,并且不是
arr.indexOf(userDate)>0的第一个

let arr=[“2017年10月27日”、“2017年11月5日”、“2017年11月10日”、“2017年11月10日”、“2017年12月”];
让userDate=“11/10/2017”;
让result=arr.indexOf(userDate)>0?arr[arr.indexOf(userDate)-1]:空;
控制台日志(结果)
如果你坚持的话。
我更愿意在实际使用时处理未定义值的情况。

var arr=[“2017年10月27日”、“2017年11月5日”、“2017年11月10日”、“2017年11月10日”、“2017年12月”];
arr[arr.indexOf(userData) - 1] ? arr[arr.indexOf(userData) - 1] : throw new Error('...');
函数findLeft(argum){ 设firstIndex=arr.indexOf(argum); 设leftside=firstIndex-1; //您需要计算<0的错误处理; 返回arr[左侧]; }
您可以使用
indexOf
获取日期索引。然后很容易得到之前的值

您可以尝试以下方法:

var-arr=[“2017年10月27日”、“2017年11月5日”、“2017年11月10日”、“2017年11月10日”、“2017年12月”];
var userDate=“11/10/2017”;
var index=arr.indexOf(userDate);//获取索引
var previous=指数>0?arr[索引-1]:null;//检查日期是否存在。如果确实存在,则获取上一个值或将其设置为null

log(上一个)
我认为
indexOf
是解决这个问题的最佳方法

var-arr=[“2017年10月27日”、“2017年11月5日”、“2017年11月10日”、“2017年11月10日”、“2017年12月”];
var userDate=“11/10/2017”;
var指数=arr.indexOf(userDate);
var结果=”;
如果(索引<0){//没有匹配的情况
结果='不匹配';
}如果(index==0){//userdate是第一个元素,则为else
结果='userDate是第一个元素';
}否则{//得到结果
结果=arr[指数-1];
}

log('result=',result)检查你只需要从结果中减去1,或者只需谷歌搜索如何在数组中查找字符串来查找两者之间的日期尝试玩这个-我没有完成它,但代码就在那里debugged@mplungjan谢谢我很感激你为什么投反对票,但是?他们可能会否决我们,惩罚我们回答了一个需要在被询问之前进行更多调查的问题。任何单一答案都假设“userDate”将始终在数组中,而不是,例如,作为“11/8/2017”——它不考虑中间日期,这很可能是原始问题想要的。为什么要调用
indexOf
两次?这可能就是你被否决的原因。老实说,我很犹豫是否会因此而否决自己的投票。@mplungjan已经被否决了。请添加解释并处理日期不是第一个或不是第一个被发现的日期没有对@mplungjan进行调用或测试您是否看到评论“您需要错误处理”?我不确定OPs错误案例是什么,他/她应该能够添加他们需要的错误处理;初始索引。为了测试中间,玩这个我没有时间完成它
arr[arr.indexOf(userData) - 1] ? arr[arr.indexOf(userData) - 1] : throw new Error('...');
var arr = ["10/27/2017","11/5/2017","11/10/2017","11/10/2017","12/12/2017"];

function findLeft(argum) {
  let firstIndex = arr.indexOf(argum);
  let leftside = firstIndex - 1;
  //you need to figure out error handling for < 0;

  return arr[leftside]; 
}