gpt4 book ai didi

javascript - 使用 map/reduce 递归计算状态?

转载 作者:搜寻专家 更新时间:2023-10-30 21:52:24 24 4
gpt4 key购买 nike

假设我有一个对象数组

let objs: foo[];

一个不可变的状态对象

let state: State;

和一个函数

transform: (state: State, obj: foo) => State;

所以 transform 使用来自当前 obj 的信息从前一个状态计算出一个新的 State;如果您认为“对我来说听起来像 Redux”,那么您可能是对的。

有没有办法为数组中的每个对象递归调用transform,这样每个计算出的state都是下一次调用transform的输入参数 使用 mapreduce?我只对最终的状态感兴趣。

我试过类似的东西

let finalState = objs.reduce((prev: State, curr: foo) => transform(prev, curr), state)

但由于 reduce 要求 prevcurrfoo 类型(数组类型),这是显然不会起作用。

最佳答案

可以使用Array.prototype.reduce提供的当前index:

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用于工作 sample

关于javascript - 使用 map/reduce 递归计算状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40969825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com