繁体   English   中英

将最大值存储在变量中的惯用方式?

[英]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.valuemaximum重复两次,这既冗长又烦人。

我的问题:有没有更惯用或更优雅的方式来写这个?

这不起作用,但是,如果>>不是按位运算符而是其他东西,则可以这样写:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM