繁体   English   中英

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

[英]Get object from array by max property

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

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

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

基本上,您希望在具有最高VersionNo versions找到该对象。

听起来像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, 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

这有很多答案。 由于您没有指定我可以显示多个选项:

  1. Jquery.grep
  2. 。地图
  3. Math.Max

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM