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

zma*_*ten 2 javascript sorting math

我需要在JavaScript中执行C#中的内容:

var latest = versions.OrderByDescending( v => v.VersionNo).First();
Run Code Online (Sandbox Code Playgroud)

我希望通过Math.max方法完成这项工作,虽然这应该是一项微不足道的任务,但我正在努力使其正确.我已经浏览了网页和几个问题,但无法使其发挥作用.

T.J*_*der 14

所以基本上,你想找到versions最高的对象VersionNo.

听起来像是一份工作Array#reduce:

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

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);
Run Code Online (Sandbox Code Playgroud)

当你按上面的方式调用它时(只有一个参数,即使用的回调),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);
Run Code Online (Sandbox Code Playgroud)

let versions = [
  {VersionNo: 3},
  {VersionNo: 7},
  {VersionNo: 1}
];

let latest = versions.reduce((l, e) => e.VersionNo > l.VersionNo ? e : l);
console.log(latest);
Run Code Online (Sandbox Code Playgroud)