我有一个对象数组,比如说
let objs: foo[];
不可变状态对象
let state: State;
和一个功能
transform: (state: State, obj: foo) => State;
因此transform
使用当前State
的信息计算前一个obj
的新transform
;如果你认为'对我来说听起来像Redux',你可能是对的。
有没有办法以递归方式为数组中的每个对象调用state
,每个计算的transform
是使用{{1}进行map
的下一次调用的输入参数和reduce
?我只对最后的state
感兴趣。
我试过像
这样的东西let finalState = objs.reduce((prev: State, curr: foo) => transform(prev, curr), state)
但由于reduce
要求prev
和curr
属于foo
类型(数组类型),否则这显然无效。
答案 0 :(得分:1)
您可以使用index
提供的当前Array.prototype.reduce
:
return objs.reduce((prev, next, index) => transform(prev, objs[index]), state);
但是这样你就可以滥用reduce
功能了。 Imo应该可以使用常规forEach
语句来完成:
function getFinalState(state: State, objs: Obj[]) : State {
objs.forEach(x => state = transform(state, x));
return state;
}
有关工作样本,请参阅此TypeScript playground