我有一个数组,其中包含以下格式的元素。我尝试的是,我收集了所有edtime
并将它们放入edtimearray
。我正在尝试在数组值中找到最大的一个。我用过这样的东西。但我收到消息"对象不支持此操作"。
var edtimearray = [];
for (var i = 0; i <= obj.length - 1; i++) {
edtimearray = obj[i].edtime;
if (i == obj.length - 1) {
var arrayMax = Function.prototype.apply.bind(Math.max, edtimearray);
}
}
我认为你可以简化很多:
var max = Math.max.apply(Math, obj.map(function(o) { return o.edtime; }));
因此,您从一个对象数组开始,并且需要来自这些对象的属性值数组。JavaScript(遗憾的是(没有标准的"pluck"方法,因此您可以使用.map()
来构建这些属性值的数组。
现在您要做的是使用这些属性值作为参数调用Math.max()
,例如
var max = Math.max(value1, value2, ... )
这就是.apply()
的用武之地。当你想要一个参数列表,但你得到的是一个数组时,.apply()
是你的朋友。因此,我们只需要用.apply()
调用Math.max()
——并将Math
作为this
值传入,因为一些本机函数对此很挑剔——然后数组作为第二个参数。
这是获取数组中最大元素的好方法:
var arr = []; // some array with values
arr.sort().reverse(); // sort array ascending order
var largestVal = arr[0];