通过max属性从数组中获取对象

Get object from array by max property

本文关键字:获取 取对象 数组 max 属性 通过      更新时间:2023-09-26

我需要在JavaScript中执行c#中看起来像这样:

var latest = versions.OrderByDescending( v => v.VersionNo).First();

我想通过数学来完成。最大的方法,虽然它应该是微不足道的任务,我正在努力使它正确。我已经浏览了网页和几个问题,但还是不行

所以基本上,你想找到versionsVersionNo最高的对象。

听起来像是Array#reduce的工作:

var latest = versions.reduce(function(l, e) {
  return e.VersionNo > l.VersionNo ? e : l;
});

var versions = [
  {VersionNo: 3},
  {VersionNo: 7},
  {VersionNo: 1}
];
var latest = versions.reduce(function(l, e) {
  return e.VersionNo > l.VersionNo ? e : l;
});
console.log(latest);

当您像上面那样调用它时(只有一个参数,要使用的回调),Array#reduce使用前两个条目调用回调,然后再为每个后续条目调用回调,第一个参数是前一个调用的返回值,第二个参数是数组中的下一个条目。结果是最后一次回调的最终返回值。

清晰如泥?这意味着如果你用[1, 2, 3, 4]在一个数组上调用它,你的回调将被1, 2调用,然后是r, 3,其中r是它返回的任何东西,然后是r, 4,其中r是它最后一次返回的任何东西。(如果你给reduce第二个参数,它使用它作为r的初始值,只做r, 1,然后r, 2,…)

所以在上面的例子中,我们从回调函数返回两个参数中VersionNo值较高的对象,这最终会给我们第一个值最高的对象。(我说"第一个"是因为如果有多个相同的值,我们将取第一个)

或者在ES2015+中:

let latest = versions.reduce((l, e) => e.VersionNo > l.VersionNo ? e : l);

let versions = [
  {VersionNo: 3},
  {VersionNo: 7},
  {VersionNo: 1}
];
let latest = versions.reduce((l, e) => e.VersionNo > l.VersionNo ? e : l);
console.log(latest);

您可以使用以下命令获取对象中属性的最大值

var latest = (Math.max.apply(Math, versions.map(function(v) {
  return v.VersionNo;
})));

.map()文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map