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))