[英]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
这有很多答案。 由于您没有指定我可以显示多个选项:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.