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

29 浏览
0 Comments

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

我需要在JavaScript中执行与C#中相似的操作:

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

我想通过使用Math.max方法来实现,尽管这应该是一个简单的任务,但我却无法正确完成。我已经查找了网页和几个相关的问题,但仍无法使其正常工作。

0
0 Comments

问题的出现原因:以上代码中使用了Math.max.apply()函数来获取对象数组中某个属性的最大值,但是实际上返回的是最大值而不是具有该属性最大值的对象。这与OP C#代码的结果不同。

解决方法:要获取具有最大属性值的对象,需要使用其他方法,例如使用Array.reduce()函数来遍历对象数组,并与当前最大值进行比较。

以下是解决该问题的代码示例:

var maxObject = versions.reduce(function(prev, current) {
  return (prev.VersionNo > current.VersionNo) ? prev : current;
});

上述代码中,使用Array.reduce()函数来迭代versions数组,并根据当前对象的VersionNo属性值与prev对象进行比较,返回较大值的对象。最终得到具有最大属性值的对象。

这样,我们就可以通过maxObject来获取具有最大VersionNo属性值的对象了。

0
0 Comments

问题的出现的原因是,需要从一个包含多个对象的数组中找到具有最高VersionNo属性值的对象。

解决方法是使用Array的reduce()方法来找到最高VersionNo属性值的对象。reduce()方法接收一个回调函数作为参数,该回调函数会在数组的每个元素上调用,并返回一个累加值。在这个回调函数中,比较每个对象的VersionNo属性值,返回具有较高属性值的对象。最终,reduce()方法返回的值就是具有最高VersionNo属性值的对象。

代码示例:

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);

以上代码会输出具有最高VersionNo属性值的对象。

在ES2015+中,可以使用箭头函数进一步简化代码:

let versions = [
  {VersionNo: 3},
  {VersionNo: 7},
  {VersionNo: 1}
];
let latest = versions.reduce((l, e) => e.VersionNo > l.VersionNo ? e : l);
console.log(latest);

以上代码同样会输出具有最高VersionNo属性值的对象。

通过使用reduce()方法,我们可以轻松地从数组中获取具有最高属性值的对象,解决了这个问题。

0