对象数组返回自最近日期以来的最高总体值

array of objects return the highest overall value from the latest date

本文关键字:高总体 日期 数组 返回 最近 对象      更新时间:2023-09-26

我有一个类似的结构:

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"

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

var array = [{
  "overall": 5,
  "date": "2016-03-15",
  "review": "sadas sasdadasdas",
}, {
  "overall": 6,
  "date": "2016-01-19",
  "review": "asfasfsadfsd",
}, {
  "overall": 9,
  "date": "2016-03-15",
  "review": "sadas sasdadasdas",
}, {
  "overall": 7,
  "date": "2016-01-23",
  "review": "adfsasfdasfas",
}];
var res = array.reduce(function(a, b) {
  // parse the date
  var d1 = Date.parse(a.date),
    d2 = Date.parse(b.date);
  // if dates are equal compare value of overall and return value , else return based on date
  return d1 == d2 ? (a.overall > b.overall ? a : b) : (d1 > d2 ? a : b);
}).overall; // get overall value from final object
document.write(res);

您可以使用.sort()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

var array = [{
  "overall": 5,
  "date": "2016-03-15",
  "review": "sadas sasdadasdas",
}, {
  "overall": 6,
  "date": "2016-01-19",
  "review": "asfasfsadfsd",
}, {
  "overall": 7,
  "date": "2016-01-23",
  "review": "adfsasfdasfas",
}];
var sortedArray = array.sort(function(a, b) {
  var aDate = Date.parse(a.date);
  var bDate = Date.parse(b.date);
  if (aDate > bDate) {
    return true;
  } else if(aDate == bDate) {
    return a.overall > b.overall;
  } else {
    return false;
  }
});
//hello
var isItMeYoureLookingFor = sortedArray[0];

基本上,按照标准排序,取第一个:)。

使用纯数组迭代:

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

您可以使用sort,首先按date进行比较,然后按overall进行比较,还可以返回review

var array = [{
  "overall": 8,
  "date": "2016-03-15",
  "review": "bla bla",
},{
  "overall": 20,
  "date": "2016-03-15",
  "review": "Random bla bla",
}, {
  "overall": 6,
  "date": "2016-01-19",
  "review": "asfasfsadfsd",
}, {
  "overall": 7,
  "date": "2016-01-23",
  "review": "adfsasfdasfas",
}];
result = array.sort((a, b) => {
  return Date.parse(b.date) - Date.parse(a.date) || b.overall - a.overall;
})[0].review;
console.log(result)