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

时间:2016-08-19 10:42:02

标签: javascript sorting math

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

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

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

3 个答案:

答案 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)

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

  1. Jquery.grep
  2. .Map
  3. Math.Max