我需要在JavaScript中执行C#中的内容:
var latest = versions.OrderByDescending( v => v.VersionNo).First();
我希望通过Math.max方法完成这项工作,尽管这应该是一项微不足道的任务,但我仍在努力使其正确无误。我已经浏览了网页和几个问题,但无法使其发挥作用。
答案 0 :(得分:12)
基本上,您希望在versions
中找到具有最高VersionNo
的对象。
听起来像是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
,...)
所以在上面,我们从回调中返回两个参数中较高let latest = versions.reduce((l, e) => e.VersionNo > l.VersionNo ? e : l);
的对象,这最终会给我们第一个具有最高值的参数。 (我说“第一个”因为如果你有多个具有相同价值的人,我们将采取第一个。)
或者在ES2015 +中:
let versions = [
{VersionNo: 3},
{VersionNo: 7},
{VersionNo: 1}
];
let latest = versions.reduce((l, e) => e.VersionNo > l.VersionNo ? e : l);
console.log(latest);
{{1}}
答案 1 :(得分:-1)
您可以使用以下
获取对象中属性的最大值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
答案 2 :(得分:-3)
这有很多答案。由于您没有指定我可以显示多个选项: