Javascript 对象数组返回最新日期的最高总值

Javascript 对象数组返回最新日期的最高总值,javascript,arrays,filter,Javascript,Arrays,Filter,我有一个类似的结构: var array = [ { "overall": 8, "date": "2016-03-15", "review": "bla bla", }, { "overall": 6, "date": "2016-01-19", "review": "asfasfsadfsd", }, { "overall": 7, "date": "2016-01-23", "review": "a

我有一个类似的结构:

var array = [
  {
    "overall": 8,
    "date": "2016-03-15",
    "review": "bla bla",
  },
  {
    "overall": 6,
    "date": "2016-01-19",
    "review": "asfasfsadfsd",
  },
  {
    "overall": 7,
    "date": "2016-01-23",
    "review": "adfsasfdasfas",
  }];
这将返回最大值:

var highestScore = Math.max.apply(Math,array.map(function(o){return o.overall;}));

如何筛选此数组以获得与最近日期的最高总体值相关的审阅?在本例中,“bla bla”

不需要对数组进行排序,因为您只想获得最高值。因此,请使用并使用对日期字符串进行比较分析

var数组=[{
“总体”:5,
“日期”:“2016-03-15”,
“回顾”:“萨达斯·萨斯达达斯”,
}, {
“总体”:6,
“日期”:“2016-01-19”,
“审查”:“ASFASADFSD”,
}, {
“总体”:9,
“日期”:“2016-03-15”,
“回顾”:“萨达斯·萨斯达达斯”,
}, {
“总体”:7,
“日期”:“2016-01-23”,
“审查”:“adfsasfdasfas”,
}];
var res=array.reduce(函数(a,b){
//解析日期
var d1=Date.parse(a.Date),
d2=Date.parse(b.Date);
//若日期相等,则比较总体值和返回值,否则根据日期返回
返回d1==d2?(a.总体>b.总体?a:b):(d1>d2?a:b);
}).整体;//从最终对象获取总体值
文件编写(res)
您可以使用
.sort()


基本上,使用条件排序,取第一个:)。

使用普通数组迭代:

function newestHighestOverall(arr){
  if(arr.length == 0) return 0;

  var latestDate = new Date(arr[0].date);
  var highestOverall = arr[0].overall;

  for(var i=0;i<arr.length;i++){
    if(latestDate < new Date(arr[i].date)){
        highestOverall = arr[i].overall;
        latestDate = new Date(arr[i].date);
    }else if(latestDate == new Date(arr[i].date)){
        highestOverall = Math.max(highestOverall, arr[i].overall);
    }
  }
  return highestOverall
}

console.log(newestHighestOverall(array))
函数newestHighestOverall(arr){
如果(arr.length==0)返回0;
var latestDate=新日期(arr[0].Date);
var highestoreall=arr[0]。总体;

对于(var i=0;i您可以使用
排序
,首先按
日期
比较,然后按
总体
比较,还可以返回查看

var数组=[{
“总体”:8,
“日期”:“2016-03-15”,
“回顾”:“布拉布拉”,
},{
“总体”:20,
“日期”:“2016-03-15”,
“回顾”:“随机布拉布拉”,
}, {
“总体”:6,
“日期”:“2016-01-19”,
“审查”:“ASFASADFSD”,
}, {
“总体”:7,
“日期”:“2016-01-23”,
“审查”:“adfsasfdasfas”,
}];
结果=数组。排序((a,b)=>{
返回日期.parse(b.Date)-Date.parse(a.Date)| | b.overall-a.overall;
})[0]。审查;

console.log(结果)
最新日期的最高总体值,您返回的只是最高总体值。在这种情况下,您应该比较一下
。当日期相同时,您可以给出最高的
。当有并列日期时,总体
值?我正要评论相同的事情^ar到目前为止,最好的答案是我假设同一个日期可以有多个值,这是正确的吗?这个例子应该说明问题,换句话说,它应该有两个最新的日期。我不会使用排序,因为我们不需要排序数组,只需要一个值。我个人更喜欢使用
。reduce
(如果已更新为该问题的技术正确)。为什么要如此强烈地避免排序?我喜欢这两种方法中的任何一种,如果这一种方法对您更具可读性,或者如果您认为排序后的数组在以后会很有用,那么排序在大多数情况下都不会有性能问题。只是,
。排序是不必要的。同样的原因,我会使用
。call
而不是
。apply
尽可能。使用正确的工具完成这项工作,你知道吗?我想指出的另一件事是,你正在对原始数组进行排序(使新的变量声明变得多余,并且有点误导)。一个可能的警告是,如果原始数组索引存储在其他地方,它们现在很可能指向错误的索引。我认为根据问题的上下文,排序可能是一个好主意。从外观上看,数组中没有太多要排序的项,因此计算成本不高,这也是一种声明性的方法域逻辑的e。我认为排序是合适的。我真的很喜欢这个答案的逻辑,但我仍然认为使用
。reduce
会更好。如果你想用它更新你的答案,我已经为你做了一个例子
function newestHighestOverall(arr){
  if(arr.length == 0) return 0;

  var latestDate = new Date(arr[0].date);
  var highestOverall = arr[0].overall;

  for(var i=0;i<arr.length;i++){
    if(latestDate < new Date(arr[i].date)){
        highestOverall = arr[i].overall;
        latestDate = new Date(arr[i].date);
    }else if(latestDate == new Date(arr[i].date)){
        highestOverall = Math.max(highestOverall, arr[i].overall);
    }
  }
  return highestOverall
}

console.log(newestHighestOverall(array))