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



假设你有一个变量let maximum = 0;,你这样做:

for (let someObject of Objects) {
maximum = someObject.value > maximum ? someObject.value : maximum;
}

我认为这段代码相当丑陋。目标只是在出现更大的值时覆盖maximum。然而,要做到这一点,您必须将someObject.valuemaximum各重复两次,这既冗长又令人讨厌。

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

这不起作用,但是,如果>>不是位操作符,而是其他操作符,则可以这样写:

maximum >> someObject.value;

要优雅得多。Typescript中存在这样的东西吗?

映射并传播到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);

效用函数可以更清晰:

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);
}

相关内容

最新更新