我正在尝试找到数组中最大的项目。
使用直接,简单,干净,优雅,快速的方法解决这个问题很简单 - 迭代数组:
private GetMaxValue(data: Array<RealtimeDataPoint>): number {
if (data.length === 0)
return 0;
var maxValue = data[0].Value;
for (var i: number = 1; i < data.length; i++) {
if (data[i].Value > maxValue)
maxValue = data[i].Value;
}
return maxValue;
}
然后,我不想用简单的方法解决问题,而是想尝试使用.reduce
解决问题:
private GetMaxValue(data: Array<RealtimeDataPoint>): number {
var pt: RealtimeDataPoint = data.reduce(function (previousValue: RealtimeDataPoint, currentValue: RealtimeDataPoint, currentIndex: number, array: Array<RealtimeDataPoint>): RealtimeDataPoint {
if (currentValue.Value > previousValue.Value)
return currentValue;
else
return previousValue;
});
if (pt != null)
return pt.Value;
else
return 0;
}
它很棒,而且它可以编译。但它在运行时崩溃了:
对象不支持此操作
似乎表明var pt: RealtimeDataPoint = data.reduce(...)
行上的某些内容不起作用,因为它就是它停止的行:
并不是它不支持的.reduce
成员,因为那就是那里。
所以,有两个问题:
Bonus Chatter
答案 0 :(得分:1)
解决了它。
Internet Explorer 11的错误消息是:
对象不支持此操作
Chrome 32的错误消息是:
减少没有初始值的空数组
这样修复很简单;从优雅的解决方案中借鉴一些东西:
private GetMaxValue(data: Array<RealtimeDataPoint>): number {
if (data.length === 0)
return 0;
var pt: RealtimeDataPoint = data.reduce(function (previousValue: RealtimeDataPoint, currentValue: RealtimeDataPoint, currentIndex: number, array: Array<RealtimeDataPoint>): RealtimeDataPoint {
if (currentValue.Value > previousValue.Value)
return currentValue;
else
return previousValue;
});
if (pt != null)
return pt.Value;
else
return 0;
}
考虑到reduce
模式和associated performance penalty的详细程度,我认为我会坚持使用优雅的解决方案。
但至少现在有一个TypeScript中reduce
语法的例子。
注意:任何已发布到公共领域的代码。无需归属。
答案 1 :(得分:0)
我会使用类似 Math.max(0, ...data.map(({Value})) => Value))
的东西。