假设你有一个变量let maximum = 0;
,你这样做:
for (let someObject of Objects) {
maximum = someObject.value > maximum ? someObject.value : maximum;
}
我认为这段代码相当丑陋。目标只是在出现更大的值时覆盖maximum
。然而,要做到这一点,您必须将someObject.value
和maximum
各重复两次,这既冗长又令人讨厌。
我的问题是:有没有更习惯或更优雅的方式来写这个?
这不起作用,但是,如果>>
不是位操作符,而是其他操作符,则可以这样写:
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);
}