[英]How to call array reduce in TypeScript?
我试图找到数组中最大的项目。
使用直接、简单、干净、优雅、快速的方法来解决这个问题非常简单——迭代数组:
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
成员,因为它就在那里。
所以,两个问题:
奖金喋喋不休
解决了。
来自 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
模式的冗长,以及相关的性能损失,我想我会坚持优雅的解决方案。
但至少现在在 TypeScript 中有一个reduce
语法的例子。
注意:任何发布到公共领域的代码。 不需要归属。
我会使用类似Math.max(0, ...data.map(({Value})) => Value))
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.