[英]Idiomatic way of storing largest value in a variable?
假设你有变量let maximum = 0;
你做这样的事情:
for (let someObject of Objects) {
maximum = someObject.value > maximum ? someObject.value : maximum;
}
我认为这段代码非常难看。 如果出现更大的值,目标只是覆盖maximum
。 但是,要做到这一点,您必须将someObject.value
和maximum
重复两次,这既冗长又烦人。
我的问题:有没有更惯用或更优雅的方式来写这个?
这不起作用,但是,如果>>
不是按位运算符而是其他东西,则可以这样写:
maximum >> someObject.value;
这要优雅得多。 Typescript中是否存在类似的东西?
Map 并传播到Math.max
:
const maximum = Math.max(0, ...Objects.map(o => o.value));
这会创建第二个数组,但希望能满足您对优雅的要求:
const maximum = Objects.map(o => o.value).reduce((p, c)=>Math.max(p,c));
这减少了原始数组,但很笨拙:
const maximum = Objects.reduce((m, {value}) => Math.max(m, value), 0);
实用程序 function 可能更清楚:
const maximum = maxSelect(Objects, o=>o.value);
function maxSelect<T>(a: Array<T>, select: (t:T)=>number) {
return a.reduce((m, c) => Math.max(m, select(c)), Number.NEGATIVE_INFINITY);
}
或者你可以写:
for (let someObject of Objects) {
maximum = Math.max(maximum, someObject.value);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.