通过max属性从数组中获取对象
Get object from array by max property
我需要在JavaScript中执行c#中看起来像这样:
var latest = versions.OrderByDescending( v => v.VersionNo).First();
我想通过数学来完成。最大的方法,虽然它应该是微不足道的任务,我正在努力使它正确。我已经浏览了网页和几个问题,但还是不行
所以基本上,你想找到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
值较高的对象,这最终会给我们第一个值最高的对象。(我说"第一个"是因为如果有多个相同的值,我们将取第一个)
或者在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
相关文章:
- 从ajax请求中获取javascript对象
- 通过字符串获取JSON对象
- 如何在angular中获取json对象的名称
- 如何使用angular获取json对象的名称
- 获取一个对象´s属性的名称使用字符串
- 正在从嵌套值获取父对象
- 获取js对象键的值
- 获取原型对象的名称
- 如何从给定的代码中获取JSON对象
- 了解如何在数组中获取特定对象
- 获取整数对象属性名称的最小值和最大值
- 从Angular Scope中的Array中获取所有对象
- 在Javascript函数中获取Java对象属性
- 如何在JQUERY中从HTML文档中获取XML对象
- Backbone集合:如何从API中获取特定对象以放置在模型中
- 基于单个属性从数组中获取唯一对象
- 获取JSON对象中数组的长度
- 尝试获取每个对象的总和
- 正在尝试获取非对象php-DOM的属性
- 如何从HTML元素中获取Javascript对象