Javascript函数超出规则

时间:2016-06-19 19:12:14

标签: javascript

我有从数组中返回最大日期的函数:

 function getResult(){
    var arr=[{Id:540, MeasureDate:"2016-06-27T15:06:47"},
             {Id:541, MeasureDate:"2016-06-27T12:24:39"}];


  title.innerHTML = new Date(Math.max.apply(null, arr.map(function (e){  
         return new Date(e.MeasureDate);
   }))).toISOString();}  

以下是fiddler

当我在chromeIE打开上面的小提琴示例时,我会得到不同的结果。

知道为什么吗?

3 个答案:

答案 0 :(得分:1)

Math.max函数假定其参数中的所有内容都可以转换为数字。对于一个日期来说,这不一定是真的(并且显然在IE中搞砸了,毫不奇怪)。

这是否有效:

title.innerHTML = new Date(Math.max.apply(null, arr.map(function (e){  
         return new Date(e.MeasureDate).getTime();
   }))).toISOString();

答案 1 :(得分:1)

还有一个解决方案。在可读性方面,在一行中执行所有步骤并不是一个好主意。

var maxDate = Math.max(...arr.map((e)=> new Date(e.MeasureDate)))
title.innerHTML = new Date(maxDate).toISOString();

答案 2 :(得分:1)

如果要求返回最新的日期字符串,即最大数字,则可以使用String.prototype.match()Array.prototype.sort()

var arr=[{Id:540, MeasureDate:"2016-06-27T15:06:47"},
             {Id:541, MeasureDate:"2016-06-27T12:24:39"}];

function n(d) {
  return d.match(/\d+/g).join("")
}

var res = arr.sort(function(a, b) {
  return +n(b.MeasureDate) - +n(a.MeasureDate)
})[0].MeasureDate;

document.body.textContent = res;